aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/analyze.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2020-02-17 15:19:58 +0100
committerPeter Eisentraut <peter@eisentraut.org>2020-02-17 15:21:12 +0100
commit4a97f647ddbc79af2fb91727d4a2502ce667d0fd (patch)
treea9ac774eacc424700ad620d634193f9b14232183 /src/backend/parser/analyze.c
parent0b54741815694cc97041c81e344aa9b3162e529e (diff)
downloadpostgresql-4a97f647ddbc79af2fb91727d4a2502ce667d0fd.tar.gz
postgresql-4a97f647ddbc79af2fb91727d4a2502ce667d0fd.zip
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 <pavel.stehule@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/b05e781a-fa16-6b52-6738-761181204567@2ndquadrant.com
Diffstat (limited to 'src/backend/parser/analyze.c')
-rw-r--r--src/backend/parser/analyze.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 345a8e61977..ecd6a8bae7d 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;
}
/*