From c6a01d924939306e95c8deafd09352be6a955648 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Fri, 7 May 2021 22:29:43 +0200 Subject: [PATCH] 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 --- contrib/postgres_fdw/postgres_fdw.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 8bcdc8d616..4ff58d9c27 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;