aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-04-11 20:07:17 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-04-11 20:07:17 -0400
commit39c283e498de1bb7c3d5beadfffcf3273ae8cc27 (patch)
tree8f38ff73c52585c801cad99aebc9a6a02fc14631 /src/backend/executor
parentb0e40d189325dc7a54d2546245e766f8c47a7c8d (diff)
downloadpostgresql-39c283e498de1bb7c3d5beadfffcf3273ae8cc27.tar.gz
postgresql-39c283e498de1bb7c3d5beadfffcf3273ae8cc27.zip
Fix _SPI_execute_plan() for CREATE TABLE IF NOT EXISTS foo AS ...
When IF NOT EXISTS was added to CREATE TABLE AS, this logic didn't get the memo, possibly resulting in an Assert failure. It looks like there would have been no ill effects in a non-Assert build, though. Back-patch to 9.5 where the IF NOT EXISTS option was added. Stas Kelvich
Diffstat (limited to 'src/backend/executor')
-rw-r--r--src/backend/executor/spi.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index fd9417904fd..23cb6f407dd 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -2217,15 +2217,23 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI,
*/
if (IsA(stmt, CreateTableAsStmt))
{
- Assert(strncmp(completionTag, "SELECT ", 7) == 0);
- _SPI_current->processed = pg_strtouint64(completionTag + 7,
- NULL, 10);
+ CreateTableAsStmt *ctastmt = (CreateTableAsStmt *) stmt;
+
+ if (strncmp(completionTag, "SELECT ", 7) == 0)
+ _SPI_current->processed =
+ pg_strtouint64(completionTag + 7, NULL, 10);
+ else
+ {
+ /* Must be an IF NOT EXISTS that did nothing */
+ Assert(ctastmt->if_not_exists);
+ _SPI_current->processed = 0;
+ }
/*
* For historical reasons, if CREATE TABLE AS was spelled
* as SELECT INTO, return a special return code.
*/
- if (((CreateTableAsStmt *) stmt)->is_select_into)
+ if (ctastmt->is_select_into)
res = SPI_OK_SELINTO;
}
else if (IsA(stmt, CopyStmt))