pgsql: Fix access to no-longer-open relcache entry in logical-rep worke

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix access to no-longer-open relcache entry in logical-rep worke
Дата
Msg-id E1lkcs9-0004Bh-7M@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix access to no-longer-open relcache entry in logical-rep worker.

If we redirected a replicated tuple operation into a partition child
table, and then tried to fire AFTER triggers for that event, the
relation cache entry for the child table was already closed.  This has
no visible ill effects as long as the entry is still there and still
valid, but an unluckily-timed cache flush could result in a crash or
other misbehavior.

To fix, postpone the ExecCleanupTupleRouting call (which is what
closes the child table) until after we've fired triggers.  This
requires a bit of refactoring so that the cleanup function can
have access to the necessary state.

In HEAD, I took the opportunity to simplify some of worker.c's
function APIs based on use of the new ApplyExecutionData struct.
However, it doesn't seem safe/practical to back-patch that aspect,
at least not without a lot of analysis of possible interactions
with a04daa97a.

In passing, add an Assert to afterTriggerInvokeEvents to catch
such cases.  This seems worthwhile because we've grown a number
of fairly unstructured ways of calling AfterTriggerEndQuery.

Back-patch to v13, where worker.c grew the ability to deal with
partitioned target tables.

Discussion: https://postgr.es/m/3382681.1621381328@sss.pgh.pa.us

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/5b4791b4580e95a1230e89c11c08058f18b92225

Modified Files
--------------
src/backend/commands/trigger.c           |   2 +
src/backend/replication/logical/worker.c | 113 +++++++++++++++++++++----------
2 files changed, 80 insertions(+), 35 deletions(-)


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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: pgsql: doc: PG 14 relnotes, adjust pg_{read|write}_all_data entry
Следующее
От: Bruce Momjian
Дата:
Сообщение: pgsql: doc: word-wrap and indent PG 14 relnotes