aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_utilcmd.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2015-04-20 16:11:25 -0400
committerBruce Momjian <bruce@momjian.us>2015-04-20 16:11:25 -0400
commitd992f8a8961c09ec219373ffe2b5e6473febd065 (patch)
tree58f39cc0ebdc2d7efccd52a7ddcb0f264e99dcd1 /src/backend/parser/parse_utilcmd.c
parent00882d9e5ce7b693aa536346f68a826064c8683a (diff)
downloadpostgresql-d992f8a8961c09ec219373ffe2b5e6473febd065.tar.gz
postgresql-d992f8a8961c09ec219373ffe2b5e6473febd065.zip
Honor OID status of CREATE LIKE'd tables
Previously, tables created by CREATE LIKE never had OIDs. Report by Tom Lane
Diffstat (limited to 'src/backend/parser/parse_utilcmd.c')
-rw-r--r--src/backend/parser/parse_utilcmd.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index 1fc8c2cbe1e..f66af41b1a3 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.