aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2014-08-25 22:19:05 -0400
committerBruce Momjian <bruce@momjian.us>2014-08-25 22:19:05 -0400
commita7ae1dcf4939cf643c5abe8dd673e4b87a6efd42 (patch)
treeb71652b71d5609e31bae011db4bb9cc5c28c4048 /src/backend/commands
parent73fe87503f23144a27f0bdecc55587deb5aa425f (diff)
downloadpostgresql-a7ae1dcf4939cf643c5abe8dd673e4b87a6efd42.tar.gz
postgresql-a7ae1dcf4939cf643c5abe8dd673e4b87a6efd42.zip
pg_upgrade: prevent automatic oid assignment
Prevent automatic oid assignment when in binary upgrade mode. Also throw an error when contrib/pg_upgrade_support functions are called when not in binary upgrade mode. This prevent automatically-assigned oids from conflicting with later pre-assigned oids coming from the old cluster. It also makes sure oids are preserved in call important cases.
Diffstat (limited to 'src/backend/commands')
-rw-r--r--src/backend/commands/typecmds.c9
-rw-r--r--src/backend/commands/user.c9
2 files changed, 14 insertions, 4 deletions
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index ec439fabd63..ad364efbcbd 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -1986,9 +1986,14 @@ AssignTypeArrayOid(void)
{
Oid type_array_oid;
- /* Use binary-upgrade override for pg_type.typarray, if supplied. */
- if (IsBinaryUpgrade && OidIsValid(binary_upgrade_next_array_pg_type_oid))
+ /* Use binary-upgrade override for pg_type.typarray? */
+ if (IsBinaryUpgrade)
{
+ if (!OidIsValid(binary_upgrade_next_array_pg_type_oid))
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("pg_type array OID value not set when in binary upgrade mode")));
+
type_array_oid = binary_upgrade_next_array_pg_type_oid;
binary_upgrade_next_array_pg_type_oid = InvalidOid;
}
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index d3a2044191b..91b6fa5c17d 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -379,10 +379,15 @@ CreateRole(CreateRoleStmt *stmt)
/*
* pg_largeobject_metadata contains pg_authid.oid's, so we use the
- * binary-upgrade override, if specified.
+ * binary-upgrade override.
*/
- if (IsBinaryUpgrade && OidIsValid(binary_upgrade_next_pg_authid_oid))
+ if (IsBinaryUpgrade)
{
+ if (!OidIsValid(binary_upgrade_next_pg_authid_oid))
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("pg_authid OID value not set when in binary upgrade mode")));
+
HeapTupleSetOid(tuple, binary_upgrade_next_pg_authid_oid);
binary_upgrade_next_pg_authid_oid = InvalidOid;
}