Re: rule-related crash in v11
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Robert Haas <robertmhaas@gmail.com>
Cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2018-05-25T16:10:28Z
Lists: pgsql-hackers
Attachments
- set_mod_stmt_from_original_statement_type.patch (text/x-diff) patch
Robert Haas <robertmhaas@gmail.com> writes: > On Fri, May 25, 2018 at 11:21 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Looking at what mod_stmt is used for, we've got >> (1) the Assert that's crashing, and its siblings, which are just meant >> to cross-check that mod_stmt is consistent with the SPI return code. >> (2) two places that decide to enforce STRICT behavior if mod_stmt >> is true. >> >> I think we could just drop those Asserts. As for the other things, >> maybe we should force STRICT on the basis of examining the raw >> parsetree (which really is immutable) rather than what came out of >> the planner. It doesn't seem like a great idea that INSERT ... INTO >> should stop being considered strict if there's currently a rewrite >> rule that changes it into something else. > Yes, that does sound like surprising behavior. On closer inspection, the specific Assert you're hitting is the only one of the bunch that's really bogus. It's actually almost backwards: if we have a statement that got rewritten into some other kind of statement by a rule, it almost certainly *was* an INSERT/UPDATE/DELETE to start with. But I think there are corner cases where spi.c can return SPI_OK_REWRITTEN where we'd not have set mod_stmt (e.g., empty statement list), so I'm not comfortable with asserting mod_stmt==true either. So the attached patch just drops it. Not sure if this is worth a regression test case. regards, tom lane
Commits
-
Fix misidentification of SQL statement type in plpgsql's exec_stmt_execsql.
- f9ecb6caba07 9.6.10 landed
- da757bf0ffb0 9.3.24 landed
- 98d522a1de1b 9.4.19 landed
- 004293c66651 9.5.14 landed
- 9a8aa25ccc6c 11.0 landed
- 5a225b0d6177 10.5 landed