Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb39630f

Browse files
committed
Fix access to no-longer-open relcache entry in logical-rep worker.
If we redirected a replicated tuple operation into a partition childtable, and then tried to fire AFTER triggers for that event, therelation cache entry for the child table was already closed. This hasno visible ill effects as long as the entry is still there and stillvalid, but an unluckily-timed cache flush could result in a crash orother misbehavior.To fix, postpone the ExecCleanupTupleRouting call (which is whatcloses the child table) until after we've fired triggers. Thisrequires a bit of refactoring so that the cleanup function canhave access to the necessary state.In HEAD, I took the opportunity to simplify some of worker.c'sfunction 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 interactionswitha04daa9.In passing, add an Assert to afterTriggerInvokeEvents to catchsuch cases. This seems worthwhile because we've grown a numberof fairly unstructured ways of calling AfterTriggerEndQuery.Back-patch to v13, where worker.c grew the ability to deal withpartitioned target tables.Discussion:https://postgr.es/m/3382681.1621381328@sss.pgh.pa.us
1 parent7ce7d07 commitb39630f

File tree

2 files changed

+129
-78
lines changed

2 files changed

+129
-78
lines changed

‎src/backend/commands/trigger.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4219,6 +4219,8 @@ afterTriggerInvokeEvents(AfterTriggerEventList *events,
42194219
{
42204220
rInfo=ExecGetTriggerResultRel(estate,evtshared->ats_relid);
42214221
rel=rInfo->ri_RelationDesc;
4222+
/* Catch calls with insufficient relcache refcounting */
4223+
Assert(!RelationHasReferenceCountZero(rel));
42224224
trigdesc=rInfo->ri_TrigDesc;
42234225
finfo=rInfo->ri_TrigFunctions;
42244226
instr=rInfo->ri_TrigInstrument;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp