Ensure commands in extension scripts see the results of preceding DDL.
authorTom Lane
Tue, 2 May 2017 22:05:54 +0000 (18:05 -0400)
committerTom Lane
Tue, 2 May 2017 22:05:54 +0000 (18:05 -0400)
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

src/backend/commands/extension.c

index 37f8df1bf739dc5202f78bf8b60cf78d70a767e6..6a93ff34dd751bcb36672bb192b8b36e994fbd34 100644 (file)
@@ -710,6 +710,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,