aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-05-02 18:05:54 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-05-02 18:05:54 -0400
commitd56b8b41b32b3f5c576d6fc2b2c9af3ae4b55511 (patch)
tree39529af089ddcbaee5aca14e683648cf5b3240eb /src
parentf06caa09d9c539a2336434e6b521b6541c3da624 (diff)
downloadpostgresql-d56b8b41b32b3f5c576d6fc2b2c9af3ae4b55511.tar.gz
postgresql-d56b8b41b32b3f5c576d6fc2b2c9af3ae4b55511.zip
Ensure commands in extension scripts see the results of preceding DDL.
Due to a missing CommandCounterIncrement() call, parsing of a non-utility command in an extension script would not see the effects of the immediately preceding DDL command, unless that command's execution ends with CommandCounterIncrement() internally ... which some do but many don't. Report by Philippe Beaudoin, diagnosis by Julien Rouhaud. Rather remarkably, this bug has evaded detection since extensions were invented, so back-patch to all supported branches. Discussion: https://postgr.es/m/2cf7941e-4e41-7714-3de8-37b1a8f74dff@free.fr
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/extension.c3
-rw-r--r--src/test/modules/test_extensions/test_ext3--1.0.sql6
2 files changed, 9 insertions, 0 deletions
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 33b0de0a765..4b923c205ee 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -706,6 +706,9 @@ execute_sql_string(const char *sql, const char *filename)
List *stmt_list;
ListCell *lc2;
+ /* Be sure parser can see any DDL done so far */
+ CommandCounterIncrement();
+
stmt_list = pg_analyze_and_rewrite(parsetree,
sql,
NULL,
diff --git a/src/test/modules/test_extensions/test_ext3--1.0.sql b/src/test/modules/test_extensions/test_ext3--1.0.sql
index 7dec684dcb5..4fcb63d2bc1 100644
--- a/src/test/modules/test_extensions/test_ext3--1.0.sql
+++ b/src/test/modules/test_extensions/test_ext3--1.0.sql
@@ -1,3 +1,9 @@
/* src/test/modules/test_extensions/test_ext3--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION test_ext3" to load this file. \quit
+
+CREATE TABLE test_ext3_table (col_old INT);
+
+ALTER TABLE test_ext3_table RENAME col_old TO col_new;
+
+UPDATE test_ext3_table SET col_new = 0;