From 294aeff2ed2371d42814e497f5ad87dc813dfbab Mon Sep 17 00:00:00 2001 From: Jason Petersen Date: Fri, 16 Jun 2017 15:13:54 -0600 Subject: [PATCH] Don't call PostProcessUtility for local commands It is intended only to aid in processing of distributed DDL commands, but as written could execute during local CREATE INDEX CONCURRENTLY commands. --- src/backend/distributed/executor/multi_utility.c | 6 +++++- src/test/regress/expected/multi_index_statements.out | 4 ++++ src/test/regress/sql/multi_index_statements.sql | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/executor/multi_utility.c b/src/backend/distributed/executor/multi_utility.c index 9e994f42f..c4af3de3a 100644 --- a/src/backend/distributed/executor/multi_utility.c +++ b/src/backend/distributed/executor/multi_utility.c @@ -395,7 +395,11 @@ multi_ProcessUtility(Node *parsetree, standard_ProcessUtility(parsetree, queryString, context, params, dest, completionTag); - PostProcessUtility(parsetree); + /* don't run post-process code for local commands */ + if (ddlJobs != NIL) + { + PostProcessUtility(parsetree); + } if (commandMustRunAsOwner) { diff --git a/src/test/regress/expected/multi_index_statements.out b/src/test/regress/expected/multi_index_statements.out index b29e8682c..cc2ac53bf 100644 --- a/src/test/regress/expected/multi_index_statements.out +++ b/src/test/regress/expected/multi_index_statements.out @@ -92,6 +92,10 @@ CREATE INDEX IF NOT EXISTS lineitem_orderkey_index on index_test_hash(a); NOTICE: relation "lineitem_orderkey_index" already exists, skipping -- Verify that we can create indexes concurrently CREATE INDEX CONCURRENTLY lineitem_concurrently_index ON lineitem (l_orderkey); +-- Verify that no-name local CREATE INDEX CONCURRENTLY works +CREATE TABLE local_table (id integer, name text); +CREATE INDEX CONCURRENTLY ON local_table(id); +DROP TABLE local_table; -- Verify that all indexes got created on the master node and one of the workers SELECT * FROM pg_indexes WHERE tablename = 'lineitem' or tablename like 'index_test_%' ORDER BY indexname; schemaname | tablename | indexname | tablespace | indexdef diff --git a/src/test/regress/sql/multi_index_statements.sql b/src/test/regress/sql/multi_index_statements.sql index 557ec4043..df5a1647f 100644 --- a/src/test/regress/sql/multi_index_statements.sql +++ b/src/test/regress/sql/multi_index_statements.sql @@ -66,6 +66,11 @@ CREATE INDEX IF NOT EXISTS lineitem_orderkey_index on index_test_hash(a); -- Verify that we can create indexes concurrently CREATE INDEX CONCURRENTLY lineitem_concurrently_index ON lineitem (l_orderkey); +-- Verify that no-name local CREATE INDEX CONCURRENTLY works +CREATE TABLE local_table (id integer, name text); +CREATE INDEX CONCURRENTLY ON local_table(id); +DROP TABLE local_table; + -- Verify that all indexes got created on the master node and one of the workers SELECT * FROM pg_indexes WHERE tablename = 'lineitem' or tablename like 'index_test_%' ORDER BY indexname; \c - - - :worker_1_port