aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2019-02-15 17:12:51 +0900
committerMichael Paquier <michael@paquier.xyz>2019-02-15 17:12:51 +0900
commit06cdab9df413238c24f839f8806164c36b75f0e5 (patch)
tree472ec39be2912311932c8e7ffb6b94a4580b4bb5 /src/backend
parentb7c8766d34803b5ad7d371625aa994f4648f7845 (diff)
downloadpostgresql-06cdab9df413238c24f839f8806164c36b75f0e5.tar.gz
postgresql-06cdab9df413238c24f839f8806164c36b75f0e5.zip
Fix support for CREATE TABLE IF NOT EXISTS AS EXECUTE
The grammar IF NOT EXISTS for CTAS is supported since 9.5 and documented as such, however the case of using EXECUTE as query has never been covered as EXECUTE CTAS statements and normal CTAS statements are parsed separately. Author: Andreas Karlsson Discussion: https://postgr.es/m/2ddcc188-e37c-a0be-32bf-a56b07c3559e@proxel.se Backpatch-through: 9.5
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/parser/gram.y18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index e27d37cdfe9..9f08926e772 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -9441,11 +9441,29 @@ ExecuteStmt: EXECUTE name execute_param_clause
ctas->into = $4;
ctas->relkind = OBJECT_TABLE;
ctas->is_select_into = false;
+ ctas->if_not_exists = false;
/* cram additional flags into the IntoClause */
$4->rel->relpersistence = $2;
$4->skipData = !($9);
$$ = (Node *) ctas;
}
+ | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS
+ EXECUTE name execute_param_clause opt_with_data
+ {
+ CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt);
+ ExecuteStmt *n = makeNode(ExecuteStmt);
+ n->name = $10;
+ n->params = $11;
+ ctas->query = (Node *) n;
+ ctas->into = $7;
+ ctas->relkind = OBJECT_TABLE;
+ ctas->is_select_into = false;
+ ctas->if_not_exists = true;
+ /* cram additional flags into the IntoClause */
+ $7->rel->relpersistence = $2;
+ $7->skipData = !($12);
+ $$ = (Node *) ctas;
+ }
;
execute_param_clause: '(' expr_list ')' { $$ = $2; }