File tree 3 files changed +40
-0
lines changed
3 files changed +40
-0
lines changed Original file line number Diff line number Diff line change @@ -10700,11 +10700,29 @@ ExecuteStmt: EXECUTE name execute_param_clause
10700
10700
ctas->into = $4 ;
10701
10701
ctas->relkind = OBJECT_TABLE;
10702
10702
ctas->is_select_into = false ;
10703
+ ctas->if_not_exists = false ;
10703
10704
/* cram additional flags into the IntoClause */
10704
10705
$4 ->rel->relpersistence = $2 ;
10705
10706
$4 ->skipData = !($9 );
10706
10707
$$ = (Node *) ctas;
10707
10708
}
10709
+ | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS
10710
+ EXECUTE name execute_param_clause opt_with_data
10711
+ {
10712
+ CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt);
10713
+ ExecuteStmt *n = makeNode(ExecuteStmt);
10714
+ n->name = $10 ;
10715
+ n->params = $11 ;
10716
+ ctas->query = (Node *) n;
10717
+ ctas->into = $7 ;
10718
+ ctas->relkind = OBJECT_TABLE;
10719
+ ctas->is_select_into = false ;
10720
+ ctas->if_not_exists = true ;
10721
+ /* cram additional flags into the IntoClause */
10722
+ $7 ->rel->relpersistence = $2 ;
10723
+ $7 ->skipData = !($12 );
10724
+ $$ = (Node *) ctas;
10725
+ }
10708
10726
;
10709
10727
10710
10728
execute_param_clause : ' (' expr_list ' )' { $$ = $2 ; }
Original file line number Diff line number Diff line change @@ -261,6 +261,20 @@ ERROR: relation "as_select1" already exists
261
261
CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
262
262
NOTICE: relation "as_select1" already exists, skipping
263
263
DROP TABLE as_select1;
264
+ PREPARE select1 AS SELECT 1 as a;
265
+ CREATE TABLE as_select1 AS EXECUTE select1;
266
+ CREATE TABLE as_select1 AS EXECUTE select1;
267
+ ERROR: relation "as_select1" already exists
268
+ SELECT * FROM as_select1;
269
+ a
270
+ ---
271
+ 1
272
+ (1 row)
273
+
274
+ CREATE TABLE IF NOT EXISTS as_select1 AS EXECUTE select1;
275
+ NOTICE: relation "as_select1" already exists, skipping
276
+ DROP TABLE as_select1;
277
+ DEALLOCATE select1;
264
278
-- create an extra wide table to test for issues related to that
265
279
-- (temporarily hide query, to avoid the long CREATE TABLE stmt)
266
280
\set ECHO none
Original file line number Diff line number Diff line change @@ -277,6 +277,14 @@ CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
277
277
CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_class WHERE relkind = ' r' ;
278
278
DROP TABLE as_select1;
279
279
280
+ PREPARE select1 AS SELECT 1 as a;
281
+ CREATE TABLE as_select1 AS EXECUTE select1;
282
+ CREATE TABLE as_select1 AS EXECUTE select1;
283
+ SELECT * FROM as_select1;
284
+ CREATE TABLE IF NOT EXISTS as_select1 AS EXECUTE select1;
285
+ DROP TABLE as_select1;
286
+ DEALLOCATE select1;
287
+
280
288
-- create an extra wide table to test for issues related to that
281
289
-- (temporarily hide query, to avoid the long CREATE TABLE stmt)
282
290
\set ECHO none
You can’t perform that action at this time.
0 commit comments