diff options
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/parser/analyze.c | 18 | ||||
| -rw-r--r-- | src/backend/replication/logical/worker.c | 3 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 748bebffc1..6676412842 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; } /* diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 7a5471f95c..ad4a732fd2 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -42,6 +42,7 @@ #include "miscadmin.h" #include "nodes/makefuncs.h" #include "optimizer/optimizer.h" +#include "parser/analyze.h" #include "parser/parse_relation.h" #include "pgstat.h" #include "postmaster/bgworker.h" @@ -737,6 +738,8 @@ apply_handle_update(StringInfo s) i + 1 - FirstLowInvalidHeapAttributeNumber); } + fill_extraUpdatedCols(target_rte, RelationGetDescr(rel->localrel)); + PushActiveSnapshot(GetTransactionSnapshot()); ExecOpenIndices(estate->es_result_relation_info, false); |
