diff options
| author | Peter Eisentraut | 2020-02-17 14:19:58 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2020-02-17 14:20:57 +0000 |
| commit | ad3ae64770e5b4391ad07fb2a689d72aa45b4689 (patch) | |
| tree | 3f4f1e3b334fc011903ff4281d15c7cd64b29086 /src/backend/parser/analyze.c | |
| parent | f4ae7221413d5176e4d5a49883217ea87312104a (diff) | |
Fill in extraUpdatedCols in logical replication
The extraUpdatedCols field of the target RTE records which generated
columns are affected by an update. This is used in a variety of
places, including per-column triggers and foreign data wrappers. When
an update was initiated by a logical replication subscription, this
field was not filled in, so such an update would not affect generated
columns in a way that is consistent with normal updates. To fix,
factor out some code from analyze.c to fill in extraUpdatedCols in the
logical replication worker as well.
Reviewed-by: Pavel Stehule <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/[email protected]
Diffstat (limited to 'src/backend/parser/analyze.c')
| -rw-r--r-- | src/backend/parser/analyze.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 748bebffc17..6676412842b 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -2346,10 +2346,18 @@ transformUpdateTargetList(ParseState *pstate, List *origTlist) if (orig_tl != NULL) elog(ERROR, "UPDATE target count mismatch --- internal error"); - /* - * Record in extraUpdatedCols generated columns referencing updated base - * columns. - */ + fill_extraUpdatedCols(target_rte, tupdesc); + + return tlist; +} + +/* + * Record in extraUpdatedCols generated columns referencing updated base + * columns. + */ +void +fill_extraUpdatedCols(RangeTblEntry *target_rte, TupleDesc tupdesc) +{ if (tupdesc->constr && tupdesc->constr->has_generated_stored) { @@ -2371,8 +2379,6 @@ transformUpdateTargetList(ParseState *pstate, List *origTlist) defval.adnum - FirstLowInvalidHeapAttributeNumber); } } - - return tlist; } /* |
