summaryrefslogtreecommitdiff
path: root/src/backend/commands/user.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2011-01-07 21:59:29 -0500
committerBruce Momjian <bruce@momjian.us>2011-01-07 21:59:29 -0500
commitd8d3d2a4f37f6df5d0118b7f5211978cca22091a (patch)
tree11299c3a356d18091724b3506c6e2b8ae9965a5d /src/backend/commands/user.c
parent2896c87ce4dc789722296f010eaefd5cbb86ece3 (diff)
downloadpostgresql-d8d3d2a4f37f6df5d0118b7f5211978cca22091a.tar.gz
Fix pg_upgrade of large object permissions by preserving pg_auth.oid,
which is stored in pg_largeobject_metadata. No backpatch to 9.0 because you can't migrate from 9.0 to 9.0 with the same catversion (because of tablespace conflict), and a pre-9.0 migration to 9.0 has not large object permissions to migrate.
Diffstat (limited to 'src/backend/commands/user.c')
-rw-r--r--src/backend/commands/user.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index be049cb994..63f22d8adc 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -35,6 +35,9 @@
#include "utils/syscache.h"
#include "utils/tqual.h"
+/* Potentially set by contrib/pg_upgrade_support functions */
+Oid binary_upgrade_next_pg_authid_oid = InvalidOid;
+
/* GUC parameter */
extern bool Password_encryption;
@@ -394,6 +397,16 @@ CreateRole(CreateRoleStmt *stmt)
tuple = heap_form_tuple(pg_authid_dsc, new_record, new_record_nulls);
/*
+ * pg_largeobject_metadata contains pg_authid.oid's, so we
+ * use the binary-upgrade override, if specified.
+ */
+ if (OidIsValid(binary_upgrade_next_pg_authid_oid))
+ {
+ HeapTupleSetOid(tuple, binary_upgrade_next_pg_authid_oid);
+ binary_upgrade_next_pg_authid_oid = InvalidOid;
+ }
+
+ /*
* Insert new record in the pg_authid table
*/
roleid = simple_heap_insert(pg_authid_rel, tuple);