BUG #18713: pg_upgrade fails when owner of an extension is changed or dropped - Mailing list pgsql-bugs
From | PG Bug reporting form |
---|---|
Subject | BUG #18713: pg_upgrade fails when owner of an extension is changed or dropped |
Date | |
Msg-id | 18713-21afc479c25cce4b@postgresql.org Whole thread Raw |
Responses |
Re: BUG #18713: pg_upgrade fails when owner of an extension is changed or dropped
|
List | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 18713 Logged by: Hanumant Mittal Email address: mittalhanumant@gmail.com PostgreSQL version: 15.4 Operating system: Debian GNU/Linux rodete Description: pg_upgrade from pg14 to pg15 fails with error of this kind: ``` pg_restore: from TOC entry 3999; 0 0 ACL FUNCTION "pg_stat_statements_reset"("userid" "oid", "dbid" "oid", "queryid" bigint) newuser pg_restore: error: could not execute query: ERROR: role "16384" does not exist ``` Condition that seems to be triggering this is if we create an extension with one user (e.g. olduser), reassigned to another user (e.g. newuser) and drop the olduser. Post that if we trigger pg_upgrade it fails. Steps to reproduce: # Setup pg14 /usr/lib/postgresql/14/bin/initdb --locale=C.UTF-8 /tmp/data-14 /usr/lib/postgresql/14/bin/pg_ctl -D /tmp/data-14 -l logfile start # Steps on psql postgres=# select version(); version ------------------------------------------------------------------------------------------------------------------ PostgreSQL 14.5 (Debian 14.5-3+build1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit (1 row) postgres=# CREATE USER olduser WITH PASSWORD 'old_password'; ALTER USER olduser WITH SUPERUSER; CREATE USER newuser WITH PASSWORD 'new_password'; ALTER USER newuser WITH SUPERUSER; CREATE ROLE ALTER ROLE CREATE ROLE ALTER ROLE postgres=# \q postgres@hanumant:~$ /usr/lib/postgresql/14/bin/psql -U olduser -d postgres psql (14.5 (Debian 14.5-3+build1)) Type "help" for help. postgres=# CREATE EXTENSION IF NOT EXISTS pg_stat_statements; CREATE EXTENSION postgres=# \q postgres@hanumant:~$ /usr/lib/postgresql/14/bin/psql -U postgres -d postgres^C postgres@hanumant:~$ /usr/lib/postgresql/14/bin/psql -U postgres -d postgres psql (14.5 (Debian 14.5-3+build1)) Type "help" for help. postgres=# REASSIGN OWNED by olduser to newuser; DROP USER olduser; \q REASSIGN OWNED DROP ROLE postgres@hanumant:~$ # do pg_upgrade ## Setup pg15 /usr/lib/postgresql/15/bin/initdb --locale=C.UTF-8 /tmp/data-15 ## Trigger upgrade /usr/lib/postgresql/15/bin/pg_upgrade -b /usr/lib/postgresql/14/bin -B /usr/lib/postgresql/15/bin -d /tmp/data-14 -D /tmp/data-15 -r -v Fails with: executing: ALTER DATABASE "template0" ALLOW_CONNECTIONS = false ok Restoring global objects in the new cluster "/usr/lib/postgresql/15/bin/psql" --echo-queries --set ON_ERROR_STOP=on --no-psqlrc --dbname=template1 --host /var/lib/postgresql --port 50432 --username postgres -f "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/dump/pg_upgrade_dump_globals.sql" >> "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/log/pg_upgrade_utility.log" 2>&1 ok Restoring database schemas in the new cluster "/usr/lib/postgresql/15/bin/pg_restore" --host /var/lib/postgresql --port 50432 --username postgres --clean --create --exit-on-error --verbose --dbname postgres "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/dump/pg_upgrade_dump_1.custom" >> "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/log/pg_upgrade_dump_1.log" 2>&1 "/usr/lib/postgresql/15/bin/pg_restore" --host /var/lib/postgresql --port 50432 --username postgres --clean --create --exit-on-error --verbose --dbname template1 "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/dump/pg_upgrade_dump_14426.custom" >> "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/log/pg_upgrade_dump_14426.log" 2>&1 *failure* There were problems executing ""/usr/lib/postgresql/15/bin/pg_restore" --host /var/lib/postgresql --port 50432 --username postgres --clean --create --exit-on-error --verbose --dbname template1 "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/dump/pg_upgrade_dump_14426.custom" >> "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/log/pg_upgrade_dump_14426.log" 2>&1" Consult the last few lines of "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/log/pg_upgrade_dump_14426.log" for the probable cause of the failure. Failure, exiting "/usr/lib/postgresql/15/bin/pg_ctl" -w -D "/tmp/data-15" -o "" -m fast stop >> "/tmp/data-15/pg_upgrade_output.d/20241118T132722.992/log/pg_upgrade_server.log" 2>&1 ## Checking logs: pg_restore: creating ACL "public.FUNCTION "pg_stat_statements_reset"("userid" "oid", "dbid" "oid", "queryid" bigint)" pg_restore: while PROCESSING TOC: pg_restore: from TOC entry 3999; 0 0 ACL FUNCTION "pg_stat_statements_reset"("userid" "oid", "dbid" "oid", "queryid" bigint) newuser pg_restore: error: could not execute query: ERROR: role "16384" does not exist Command was: SELECT pg_catalog.binary_upgrade_set_record_init_privs(true); REVOKE ALL ON FUNCTION "public"."pg_stat_statements_reset"("userid" "oid", "dbid" "oid", "queryid" bigint) FROM PUBLIC; REVOKE ALL ON FUNCTION "public"."pg_stat_statements_reset"("userid" "oid", "dbid" "oid", "queryid" bigint) FROM "newuser"; SET SESSION AUTHORIZATION "16384"; GRANT ALL ON FUNCTION "public"."pg_stat_statements_reset"("userid" "oid", "dbid" "oid", "queryid" bigint) TO "16384"; RESET SESSION AUTHORIZATION; SELECT pg_catalog.binary_upgrade_set_record_init_privs(false); REVOKE ALL ON FUNCTION "public"."pg_stat_statements_reset"("userid" "oid", "dbid" "oid", "queryid" bigint) FROM "16384"; GRANT ALL ON FUNCTION "public"."pg_stat_statements_reset"("userid" "oid", "dbid" "oid", "queryid" bigint) TO "newuser";
pgsql-bugs by date: