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 @@ -10773,11 +10773,29 @@ ExecuteStmt: EXECUTE name execute_param_clause
10773
10773
ctas->into = $4 ;
10774
10774
ctas->relkind = OBJECT_TABLE;
10775
10775
ctas->is_select_into = false ;
10776
+ ctas->if_not_exists = false ;
10776
10777
/* cram additional flags into the IntoClause */
10777
10778
$4 ->rel->relpersistence = $2 ;
10778
10779
$4 ->skipData = !($9 );
10779
10780
$$ = (Node *) ctas;
10780
10781
}
10782
+ | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS
10783
+ EXECUTE name execute_param_clause opt_with_data
10784
+ {
10785
+ CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt);
10786
+ ExecuteStmt *n = makeNode(ExecuteStmt);
10787
+ n->name = $10 ;
10788
+ n->params = $11 ;
10789
+ ctas->query = (Node *) n;
10790
+ ctas->into = $7 ;
10791
+ ctas->relkind = OBJECT_TABLE;
10792
+ ctas->is_select_into = false ;
10793
+ ctas->if_not_exists = true ;
10794
+ /* cram additional flags into the IntoClause */
10795
+ $7 ->rel->relpersistence = $2 ;
10796
+ $7 ->skipData = !($12 );
10797
+ $$ = (Node *) ctas;
10798
+ }
10781
10799
;
10782
10800
10783
10801
execute_param_clause : ' (' expr_list ' )' { $$ = $2 ; }
Original file line number Diff line number Diff line change @@ -263,6 +263,20 @@ ERROR: relation "as_select1" already exists
263
263
CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
264
264
NOTICE: relation "as_select1" already exists, skipping
265
265
DROP TABLE as_select1;
266
+ PREPARE select1 AS SELECT 1 as a;
267
+ CREATE TABLE as_select1 AS EXECUTE select1;
268
+ CREATE TABLE as_select1 AS EXECUTE select1;
269
+ ERROR: relation "as_select1" already exists
270
+ SELECT * FROM as_select1;
271
+ a
272
+ ---
273
+ 1
274
+ (1 row)
275
+
276
+ CREATE TABLE IF NOT EXISTS as_select1 AS EXECUTE select1;
277
+ NOTICE: relation "as_select1" already exists, skipping
278
+ DROP TABLE as_select1;
279
+ DEALLOCATE select1;
266
280
-- create an extra wide table to test for issues related to that
267
281
-- (temporarily hide query, to avoid the long CREATE TABLE stmt)
268
282
\set ECHO none
Original file line number Diff line number Diff line change @@ -278,6 +278,14 @@ CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
278
278
CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_class WHERE relkind = ' r' ;
279
279
DROP TABLE as_select1;
280
280
281
+ PREPARE select1 AS SELECT 1 as a;
282
+ CREATE TABLE as_select1 AS EXECUTE select1;
283
+ CREATE TABLE as_select1 AS EXECUTE select1;
284
+ SELECT * FROM as_select1;
285
+ CREATE TABLE IF NOT EXISTS as_select1 AS EXECUTE select1;
286
+ DROP TABLE as_select1;
287
+ DEALLOCATE select1;
288
+
281
289
-- create an extra wide table to test for issues related to that
282
290
-- (temporarily hide query, to avoid the long CREATE TABLE stmt)
283
291
\set ECHO none
You can’t perform that action at this time.
0 commit comments