diff options
| author | Robert Haas <rhaas@postgresql.org> | 2011-04-25 16:55:11 -0400 |
|---|---|---|
| committer | Robert Haas <rhaas@postgresql.org> | 2011-04-25 16:55:11 -0400 |
| commit | 68ef051f5cf16f82a5368067a40ffba3c340b0d3 (patch) | |
| tree | 6b8158651e981c35d3653f59114ef33ec9946a2f /src/backend/tcop/utility.c | |
| parent | be90032e0d1cf473bdd99aee94218218f59f29f1 (diff) | |
| download | postgresql-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.c | 18 |
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 { |
