Problems with pg_upgrade.

Started by Bror Jonssonover 11 years ago5 messagesgeneral
Jump to latest
#1Bror Jonsson
brorfred@gmail.com

Dear all,

I’m trying to upgrade from 9.0 to 9.2 with out any success. the pg_upgrade script fails with the message Old and new cluster install users have different values for pg_authid.oid:

geo-route-in:~ bror$ /opt/local//lib/postgresql92/bin/pg_upgrade -b /opt/local//lib/postgresql90/bin/ -B /opt/local//lib/postgresql92/bin/ -d /Volumes/ruoteRAID/db/postgresql90/defaultdb/ -D /Volumes/ruoteRAID/db/postgresql92/defaultdb/ -u bror
Performing Consistency Checks
-----------------------------
Checking current, bin, and data directories ok
Checking cluster versions ok
Checking database user is a superuser ok
Checking for prepared transactions ok
Checking for reg* system OID user data types ok
Checking for contrib/isn with bigint-passing mismatch ok
Creating catalog dump ok
Checking for presence of required libraries ok
Checking database user is a superuser ok

Old and new cluster install users have different values for pg_authid.oid.
Failure, exiting

The only information about this error I could find in in the source code:

https://github.com/postgres/postgres/blob/master/contrib/pg_upgrade/check.c


/*
* We don't restore our own user, so both clusters must match have
* matching install-user oids.
*/
if (old_cluster.install_role_oid != new_cluster.install_role_oid)
pg_fatal("Old and new cluster install users have different values for pg_authid.oid.\n");

/*
* We only allow the install user in the new cluster because other defined
* users might match users defined in the old cluster and generate an
* error during pg_dump restore.
*/
if (new_cluster.role_count != 1)
pg_fatal("Only the install user can be defined in the new cluster.\n");

check_for_prepared_transactions(&new_cluster);
}

pg_authid in the old db looks as follows:

bror=# SELECT * FROM pg_authid;
rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolconnlimit | rolpassword | rolvaliduntil
----------+----------+------------+---------------+-------------+--------------+-------------+--------------+-------------+---------------
postgres | t | t | t | t | t | t | -1 | |
bror | t | t | t | t | t | t | -1 | |
django | f | t | f | f | f | t | -1 | |
(3 rows)

And in the new one:

SELECT * FROM pg_authid;
rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil
---------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------
bror | t | t | t | t | t | t | t | -1 | |
(1 row)

Any suggestion for how to fix this?

Many thanks!

/Bror Jonsson

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bror Jonsson (#1)
Re: Problems with pg_upgrade.

Bror Jonsson <brorfred@gmail.com> writes:

I�m trying to upgrade from 9.0 to 9.2 with out any success. the pg_upgrade script fails with the message Old and new cluster install users have different values for pg_authid.oid:

geo-route-in:~ bror$ /opt/local//lib/postgresql92/bin/pg_upgrade -b /opt/local//lib/postgresql90/bin/ -B /opt/local//lib/postgresql92/bin/ -d /Volumes/ruoteRAID/db/postgresql90/defaultdb/ -D /Volumes/ruoteRAID/db/postgresql92/defaultdb/ -u bror

At a guess, "bror" is not the original superuser in the old cluster
(ie, the one who ran initdb). You need to use the name of that
superuser, not just any superuser.

regards, tom lane

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#3Bror Jonsson
brorfred@gmail.com
In reply to: Tom Lane (#2)
Re: Problems with pg_upgrade.

Thanks!

Is there any way to figure out which the original superuser was?

:-)B

On Jul 29, 2014, at 12:41, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Bror Jonsson <brorfred@gmail.com> writes:

I’m trying to upgrade from 9.0 to 9.2 with out any success. the pg_upgrade script fails with the message Old and new cluster install users have different values for pg_authid.oid:

geo-route-in:~ bror$ /opt/local//lib/postgresql92/bin/pg_upgrade -b /opt/local//lib/postgresql90/bin/ -B /opt/local//lib/postgresql92/bin/ -d /Volumes/ruoteRAID/db/postgresql90/defaultdb/ -D /Volumes/ruoteRAID/db/postgresql92/defaultdb/ -u bror

At a guess, "bror" is not the original superuser in the old cluster
(ie, the one who ran initdb). You need to use the name of that
superuser, not just any superuser.

regards, tom lane

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#4John R Pierce
pierce@hogranch.com
In reply to: Tom Lane (#2)
Re: Problems with pg_upgrade.

On 7/29/2014 9:41 AM, Tom Lane wrote:

Bror Jonsson<brorfred@gmail.com> writes:

I'm trying to upgrade from 9.0 to 9.2 with out any success. the pg_upgrade script fails with the message Old and new cluster install users have different values for pg_authid.oid:
geo-route-in:~ bror$/opt/local//lib/postgresql92/bin/pg_upgrade -b/opt/local//lib/postgresql90/bin/ -B/opt/local//lib/postgresql92/bin/ -d/Volumes/ruoteRAID/db/postgresql90/defaultdb/ -D /Volumes/ruoteRAID/db/postgresql92/defaultdb/ -u bror

At a guess, "bror" is not the original superuser in the old cluster
(ie, the one who ran initdb). You need to use the name of that
superuser, not just any superuser.

to clarify, the old cluster's install_user is postgres, while the new is
bror. they must be the same. stop the new cluster, wipe the data dir
out, and re-run initdb as the postgres user this time, THEN run the
upgrade script with -u postgres

--
john r pierce 37N 122W
somewhere on the middle of the left coast

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bror Jonsson (#3)
Re: Problems with pg_upgrade.

Bror Jonsson <brorfred@gmail.com> writes:

Is there any way to figure out which the original superuser was?

You got a surplus of superusers?

Anyway, it should be the one with OID 10.

select * from pg_authid where oid = 10;

regards, tom lane

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general