From d992f8a8961c09ec219373ffe2b5e6473febd065 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 20 Apr 2015 16:11:25 -0400 Subject: [PATCH] Honor OID status of CREATE LIKE'd tables Previously, tables created by CREATE LIKE never had OIDs. Report by Tom Lane --- src/backend/parser/parse_utilcmd.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 1fc8c2cbe1..f66af41b1a 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -56,6 +56,7 @@ #include "rewrite/rewriteManip.h" #include "utils/acl.h" #include "utils/builtins.h" +#include "utils/guc.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/syscache.h" @@ -222,7 +223,7 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString) cxt.blist = NIL; cxt.alist = NIL; cxt.pkey = NULL; - cxt.hasoids = interpretOidsOption(stmt->options, true); + cxt.hasoids = default_with_oids; Assert(!stmt->ofTypename || !stmt->inhRelations); /* grammar enforces */ @@ -281,6 +282,17 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString) * Output results. */ stmt->tableElts = cxt.columns; + /* + * Add WITH/WITHOUT OIDS, if necessary. A literal statement-specified + * WITH/WITHOUT OIDS will still take precedence because the first + * matching "oids" in "options" is used. + */ + if (cxt.hasoids && !interpretOidsOption(stmt->options, true)) + stmt->options = lappend(stmt->options, makeDefElem("oids", + (Node *)makeInteger(TRUE))); + else if (!cxt.hasoids && interpretOidsOption(stmt->options, true)) + stmt->options = lappend(stmt->options, makeDefElem("oids", + (Node *)makeInteger(FALSE))); stmt->constraints = cxt.ckconstraints; result = lappend(cxt.blist, stmt); @@ -849,6 +861,8 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla } } + cxt->hasoids = relation->rd_rel->relhasoids; + /* * Copy CHECK constraints if requested, being careful to adjust attribute * numbers so they match the child. -- 2.40.0