Re: BUG #17803: Rule "ALSO INSERT ... SELECT ..." fails to substitute default values
Dean Rasheed <dean.a.rasheed@gmail.com>
From: Dean Rasheed <dean.a.rasheed@gmail.com>
To: Alexander Lakhin <exclusion@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-bugs@lists.postgresql.org
Date: 2023-02-22T12:29:36Z
Lists: pgsql-bugs
On Wed, 22 Feb 2023 at 12:00, Alexander Lakhin <exclusion@gmail.com> wrote: > > Thanks! I understand this place better now. > I mistakenly supposed that VALUES RTE can intervene with INSERT only. > But while exploring how they can affect other statements, > I've found one more interesting thing: > CREATE TABLE t (a int, b int DEFAULT -1); > CREATE VIEW v AS SELECT * FROM t; > CREATE RULE vr AS ON INSERT TO v DO ALSO INSERT INTO t SELECT NEW.b; > INSERT INTO v VALUES(10, -1), (20, DEFAULT); > SELECT * FROM v; > > a | b > ----+---- > 10 | -1 > 20 | -1 > -1 | -1 > | -1 > Yes, that's correct. Or at least that's the way it's always been. We even have regression tests similar to that. Any DEFAULT values from the top-level command that haven't been replaced are set to NULL before the rule is evaluated, so a DEFAULT in the top-level command becomes a NULL rather than a DEFAULT in the rule action. Arguably, that isn't what some users might expect, but it's long-standing behaviour that would probably be more trouble than it's worth to change. There are many other surprises in the way rules work, which is why their use is discouraged, almost to the point of being deprecated. Regards, Dean
Commits
-
Fix mishandling of OLD/NEW references in subqueries in rule actions.
- 79f194cc0144 11.20 landed
- 4fd093af7186 12.15 landed
- 39ad791e8510 13.11 landed
- 27ff93d18c2b 14.8 landed
- 8e5b4e0013a8 15.3 landed
- a7d71c41dbd6 16.0 landed
-
Fix multi-row DEFAULT handling for INSERT ... SELECT rules.
- e68b133c30e2 11.20 landed
- 98b83b734982 12.15 landed
- 226da3d47670 13.11 landed
- f0423bea7f0a 14.8 landed
- 940b5474365f 15.3 landed
- 75c737636b8a 16.0 landed
-
Fix DEFAULT-handling in multi-row VALUES lists for updatable views.
- 41531e42d34f 12.0 cited