mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
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
This commit is contained in:
@ -10700,11 +10700,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; }
|
||||
|
Reference in New Issue
Block a user