pgsql: Fix corner case for a BEFORE ROW UPDATE trigger returning OLD.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix corner case for a BEFORE ROW UPDATE trigger returning OLD.
Дата
Msg-id E1kWkHH-0002xa-3e@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
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

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/d88d8ad28484a745fffe036a4085f4674b3064bc

Modified Files
--------------
src/backend/commands/trigger.c         | 41 +++++++++++++++++++++++++++++++++-
src/test/regress/expected/triggers.out | 32 ++++++++++++++++++++++++++
src/test/regress/sql/triggers.sql      | 18 +++++++++++++++
3 files changed, 90 insertions(+), 1 deletion(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Fix incorrect parameter name in a function header comment
Следующее
От: Michael Paquier
Дата:
Сообщение: pgsql: Extend PageIsVerified() to handle more custom options