postgresql/src/backend/commands
Tom Lane ba9f18abd3 Fix corner case for a BEFORE ROW UPDATE trigger returning OLD.
If the old row has any "missing" attributes that are supposed to
be retrieved from an associated tuple descriptor, the wrong things
happened because the trigger result is shoved directly into an
executor slot that lacks the missing-attribute data.  Notably,
CHECK-constraint verification would incorrectly see those columns
as NULL, and so would RETURNING-list evaluation.

Band-aid around this by forcibly expanding the tuple before passing
it to the trigger function.  (IMO it was a fundamental misdesign to
put the missing-attribute data into tuple constraints, which so
much of the system considers to be optional.  But we're probably
stuck with that now, and will have to continue to apply band-aids
as we find other places with similar issues.)

Back-patch to v12.  v11 would also have the issue, except that
commit 920311ab1 already applied a similar band-aid.  That forced
expansion in more cases than seem really necessary, though, so
this isn't a directly equivalent fix.

Amit Langote, with some cosmetic changes by me

Discussion: https://postgr.es/m/16644-5da7ef98a7ac4545@postgresql.org
2020-10-25 13:57:46 -04:00
..
aggregatecmds.c Update copyrights for 2020 2020-01-01 12:21:45 -05:00
alter.c Initial pgindent and pgperltidy run for v13. 2020-05-14 13:06:50 -04:00
amcmds.c Unify drop-by-OID functions 2020-06-09 09:39:46 +02:00
analyze.c snapshot scalability: Don't compute global horizons while building snapshots. 2020-08-12 16:03:49 -07:00
async.c Defer flushing of SLRU files. 2020-09-25 19:00:15 +12:00
cluster.c Set cutoff xmin more aggressively when vacuuming a temporary table. 2020-09-01 18:40:43 -04:00
collationcmds.c Remove utils/acl.h from catalog/objectaddress.h 2020-03-10 10:27:00 +01:00
comment.c Update copyrights for 2020 2020-01-01 12:21:45 -05:00
constraint.c Fix bogus CALLED_AS_TRIGGER() defenses. 2020-04-03 11:24:56 -04:00
conversioncmds.c Remove utils/acl.h from catalog/objectaddress.h 2020-03-10 10:27:00 +01:00
copy.c Remove PartitionRoutingInfo struct. 2020-10-19 14:42:55 +03:00
createas.c Skip WAL for new relfilenodes, under wal_level=minimal. 2020-04-04 12:25:34 -07:00
dbcommands.c Initial pgindent and pgperltidy run for v13. 2020-05-14 13:06:50 -04:00
define.c Update copyrights for 2020 2020-01-01 12:21:45 -05:00
discard.c Update copyrights for 2020 2020-01-01 12:21:45 -05:00
dropcmds.c Remove utils/acl.h from catalog/objectaddress.h 2020-03-10 10:27:00 +01:00
event_trigger.c Fix use-after-free bug with event triggers in an extension script 2020-09-15 21:03:14 -03:00
explain.c Fix broken XML formatting in EXPLAIN output for incremental sorts. 2020-10-23 11:32:33 -04:00
extension.c Make contrib modules' installation scripts more secure. 2020-08-10 10:44:42 -04:00
foreigncmds.c Unify drop-by-OID functions 2020-06-09 09:39:46 +02:00
functioncmds.c Support for OUT parameters in procedures 2020-10-05 09:21:43 +02:00
indexcmds.c Reword partitioning error message 2020-09-30 18:25:23 -03:00
lockcmds.c Make inherited LOCK TABLE perform access permission checks on parent table only. 2020-02-18 13:13:15 +09:00
Makefile Revert 0f5ca02f53 2020-04-08 11:37:27 +03:00
matview.c Skip WAL for new relfilenodes, under wal_level=minimal. 2020-04-04 12:25:34 -07:00
opclasscmds.c Message fixes and style improvements 2020-09-14 06:42:30 +02:00
operatorcmds.c Remove support for postfix (right-unary) operators. 2020-09-17 19:38:05 -04:00
policy.c Revise RelationBuildRowSecurity() to avoid memory leaks. 2020-09-26 16:04:06 -04:00
portalcmds.c Avoid using a cursor in plpgsql's RETURN QUERY statement. 2020-06-12 12:14:32 -04:00
prepare.c Add generic_plans and custom_plans fields into pg_prepared_statements. 2020-07-20 11:55:50 +09:00
proclang.c Switch to multi-inserts when registering dependencies for many code paths 2020-09-05 21:33:53 +09:00
publicationcmds.c Unify drop-by-OID functions 2020-06-09 09:39:46 +02:00
schemacmds.c Unify drop-by-OID functions 2020-06-09 09:39:46 +02:00
seclabel.c Grammar object type refactoring 2020-06-13 09:19:30 +02:00
sequence.c Minor mop-up for List improvements. 2020-09-27 22:30:52 -04:00
statscmds.c Replace remaining StrNCpy() by strlcpy() 2020-08-10 23:20:37 +02:00
subscriptioncmds.c Add support for streaming to built-in logical replication. 2020-09-03 07:54:07 +05:30
tablecmds.c Fix ALTER TABLE .. ENABLE/DISABLE TRIGGER recursion 2020-10-20 19:22:09 -03:00
tablespace.c Fix temporary tablespaces for shared filesets some more. 2020-07-03 17:01:34 -04:00
trigger.c Fix corner case for a BEFORE ROW UPDATE trigger returning OLD. 2020-10-25 13:57:46 -04:00
tsearchcmds.c Switch to multi-inserts when registering dependencies for many code paths 2020-09-05 21:33:53 +09:00
typecmds.c Make contrib modules' installation scripts more secure. 2020-08-10 10:44:42 -04:00
user.c Change default of password_encryption to scram-sha-256 2020-06-10 16:42:55 +02:00
vacuum.c Set cutoff xmin more aggressively when vacuuming a temporary table. 2020-09-01 18:40:43 -04:00
variable.c Update copyrights for 2020 2020-01-01 12:21:45 -05:00
view.c Restructure ALTER TABLE execution to fix assorted bugs. 2020-01-15 18:49:24 -05:00