Thread: [COMMITTERS] pgsql: Fix CREATE TABLE ... LIKE ... WITH OIDS.

[COMMITTERS] pgsql: Fix CREATE TABLE ... LIKE ... WITH OIDS.

From
Tom Lane
Date:
Fix CREATE TABLE ... LIKE ... WITH OIDS.

Having a WITH OIDS specification should result in the creation of an OID
column, but commit b943f502b broke that in the case that there were LIKE
tables without OIDS.  Commentary in that patch makes it look like this was
intentional, but if so it was based on a faulty reading of what inheritance
does: the parent tables can add an OID column, but they can't subtract one.
AFAICS, the behavior ought to be that you get an OID column if any of the
inherited tables, LIKE tables, or WITH clause ask for one.

Also, revert that patch's unnecessary split of transformCreateStmt's loop
over the tableElts list into two passes.  That seems to have been based on
a misunderstanding as well: we already have two-pass processing here,
we don't need three passes.

Per bug #14474 from Jeff Dafoe.  Back-patch to 9.6 where the misbehavior
was introduced.

Report: https://postgr.es/m/20161222145304.25620.47445@wrigleys.postgresql.org

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/1ead0208b2178089b024caa2d1465a3f3056a45c

Modified Files
--------------
src/backend/parser/parse_utilcmd.c              | 52 +++++++++----------------
src/test/regress/expected/create_table_like.out |  9 ++++-
src/test/regress/sql/create_table_like.sql      |  5 ++-
3 files changed, 30 insertions(+), 36 deletions(-)