summaryrefslogtreecommitdiff
path: root/src/backend/tcop/utility.c
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2011-04-25 16:55:11 -0400
committerRobert Haas <rhaas@postgresql.org>2011-04-25 16:55:11 -0400
commit68ef051f5cf16f82a5368067a40ffba3c340b0d3 (patch)
tree6b8158651e981c35d3653f59114ef33ec9946a2f /src/backend/tcop/utility.c
parentbe90032e0d1cf473bdd99aee94218218f59f29f1 (diff)
downloadpostgresql-68ef051f5cf16f82a5368067a40ffba3c340b0d3.tar.gz
Refactor broken CREATE TABLE IF NOT EXISTS support.
Per bug #5988, reported by Marko Tiikkaja, and further analyzed by Tom Lane, the previous coding was broken in several respects: even if the target table already existed, a subsequent CREATE TABLE IF NOT EXISTS might try to add additional constraints or sequences-for-serial specified in the new CREATE TABLE statement. In passing, this also fixes a minor information leak: it's no longer possible to figure out whether a schema to which you don't have CREATE access contains a sequence named like "x_y_seq" by attempting to create a table in that schema called "x" with a serial column called "y". Some more refactoring of this code in the future might be warranted, but that will need to wait for a later major release.
Diffstat (limited to 'src/backend/tcop/utility.c')
-rw-r--r--src/backend/tcop/utility.c18
1 files changed, 2 insertions, 16 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index b1fd5ec04f..0559998c71 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -530,13 +530,6 @@ standard_ProcessUtility(Node *parsetree,
InvalidOid);
/*
- * If "IF NOT EXISTS" was specified and the relation
- * already exists, do nothing further.
- */
- if (relOid == InvalidOid)
- continue;
-
- /*
* Let AlterTableCreateToastTable decide if this one
* needs a secondary relation too.
*/
@@ -559,15 +552,8 @@ standard_ProcessUtility(Node *parsetree,
relOid = DefineRelation((CreateStmt *) stmt,
RELKIND_FOREIGN_TABLE,
InvalidOid);
-
- /*
- * Unless "IF NOT EXISTS" was specified and the
- * relation already exists, create the
- * pg_foreign_table entry.
- */
- if (relOid != InvalidOid)
- CreateForeignTable((CreateForeignTableStmt *) stmt,
- relOid);
+ CreateForeignTable((CreateForeignTableStmt *) stmt,
+ relOid);
}
else
{