diff options
Diffstat (limited to 'src/include/commands/trigger.h')
-rw-r--r-- | src/include/commands/trigger.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/include/commands/trigger.h b/src/include/commands/trigger.h index 06199953fe9..36c1134b649 100644 --- a/src/include/commands/trigger.h +++ b/src/include/commands/trigger.h @@ -73,9 +73,17 @@ typedef struct TransitionCaptureState */ HeapTuple tcs_original_insert_tuple; - /* The tuplestores backing the transition tables. */ - Tuplestorestate *tcs_old_tuplestore; - Tuplestorestate *tcs_new_tuplestore; + /* + * The tuplestores backing the transition tables. We use separate + * tuplestores for INSERT and UPDATE, because INSERT ... ON CONFLICT + * ... DO UPDATE causes INSERT and UPDATE triggers to fire and needs a way + * to keep track of the new tuple images resulting from the two cases + * separately. We only need a single old image tuplestore, because there + * is no statement that can both update and delete at the same time. + */ + Tuplestorestate *tcs_old_tuplestore; /* for DELETE and UPDATE old images */ + Tuplestorestate *tcs_insert_tuplestore; /* for INSERT new images */ + Tuplestorestate *tcs_update_tuplestore; /* for UPDATE new images */ } TransitionCaptureState; /* |