OSDN Git Service

Refactor broken CREATE TABLE IF NOT EXISTS support.
authorRobert Haas <rhaas@postgresql.org>
Mon, 25 Apr 2011 20:55:11 +0000 (16:55 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 25 Apr 2011 20:55:11 +0000 (16:55 -0400)
commit68ef051f5cf16f82a5368067a40ffba3c340b0d3
tree6b8158651e981c35d3653f59114ef33ec9946a2f
parentbe90032e0d1cf473bdd99aee94218218f59f29f1
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.
src/backend/bootstrap/bootparse.y
src/backend/catalog/heap.c
src/backend/catalog/namespace.c
src/backend/catalog/toasting.c
src/backend/commands/cluster.c
src/backend/commands/tablecmds.c
src/backend/executor/execMain.c
src/backend/parser/parse_utilcmd.c
src/backend/tcop/utility.c
src/include/catalog/heap.h
src/include/catalog/namespace.h