aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Vondra <tomas.vondra@postgresql.org>2021-05-07 22:29:43 +0200
committerTomas Vondra <tomas.vondra@postgresql.org>2021-05-07 22:29:43 +0200
commitc6a01d924939306e95c8deafd09352be6a955648 (patch)
tree055432d1e88735defdb32b2898963a954732a120
parent8292c0675a793a5afd0a8eedbeb0db7abfb844f3 (diff)
downloadpostgresql-c6a01d924939306e95c8deafd09352be6a955648.tar.gz
postgresql-c6a01d924939306e95c8deafd09352be6a955648.zip
Copy the INSERT query in postgres_fdw
When executing the INSERT with batching, we may need to rebuild the query when the batch size changes, in which case we pfree the current string. We must not release the original string, stored in fdw_private, because that may be needed in EXPLAIN ANALYZE. So make copy of the SQL, but only for INSERT queries. Reported-by: Pavel Stehule Discussion: https://postgr.es/m/CAFj8pRCL_Rjw-MCR6J7VX9OF7MR6PA5K8qUbrMvprW_e-aHkfQ%40mail.gmail.com
-rw-r--r--contrib/postgres_fdw/postgres_fdw.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c
index 8bcdc8d6160..4ff58d9c275 100644
--- a/contrib/postgres_fdw/postgres_fdw.c
+++ b/contrib/postgres_fdw/postgres_fdw.c
@@ -3903,7 +3903,10 @@ create_foreign_modify(EState *estate,
/* Set up remote query information. */
fmstate->query = query;
if (operation == CMD_INSERT)
+ {
+ fmstate->query = pstrdup(fmstate->query);
fmstate->orig_query = pstrdup(fmstate->query);
+ }
fmstate->target_attrs = target_attrs;
fmstate->values_end = values_end;
fmstate->has_returning = has_returning;