@@ -73,6 +73,8 @@ if [ -n "$IS_CI" ]; then
73
73
echo " PGVERSION: $PGVERSION "
74
74
fi
75
75
76
+ OLD_BOOTSTRAP_USER=$( run_sql -A -t -c " select rolname from pg_authid where oid = 10;" )
77
+
76
78
cleanup () {
77
79
UPGRADE_STATUS=${1:- " failed" }
78
80
EXIT_CODE=${?:- 0}
@@ -352,10 +354,15 @@ function initiate_upgrade {
352
354
353
355
echo " 7. Disabling extensions and generating post-upgrade script"
354
356
handle_extensions
355
-
356
- echo " 8. Granting SUPERUSER to postgres user"
357
+
358
+ echo " 8.1. Granting SUPERUSER to postgres user"
357
359
run_sql -c " ALTER USER postgres WITH SUPERUSER;"
358
360
361
+ echo " 8.2. Swap postgres & supabase_admin roles if upgrading from a project with postgres as bootstrap user"
362
+ if [ " $OLD_BOOTSTRAP_USER " = " postgres" ]; then
363
+ swap_postgres_and_supabase_admin
364
+ fi
365
+
359
366
if [ -z " $IS_NIX_UPGRADE " ]; then
360
367
if [ -d " /usr/share/postgresql/${PGVERSION} " ]; then
361
368
mv " /usr/share/postgresql/${PGVERSION} " " /usr/share/postgresql/${PGVERSION} .bak"
@@ -375,17 +382,26 @@ function initiate_upgrade {
375
382
rm -rf " ${PGDATANEW:? } /"
376
383
377
384
if [ " $IS_NIX_UPGRADE " = " true" ]; then
378
- LC_ALL=en_US.UTF-8 LC_CTYPE=$SERVER_LC_CTYPE LC_COLLATE=$SERVER_LC_COLLATE LANGUAGE=en_US.UTF-8 LANG=en_US.UTF-8 LOCALE_ARCHIVE=/usr/lib/locale/locale-archive su -c " . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh && $PGBINNEW /initdb --encoding=$SERVER_ENCODING --lc-collate=$SERVER_LC_COLLATE --lc-ctype=$SERVER_LC_CTYPE -L $PGSHARENEW -D $PGDATANEW /" -s " $SHELL " postgres
385
+ LC_ALL=en_US.UTF-8 LC_CTYPE=$SERVER_LC_CTYPE LC_COLLATE=$SERVER_LC_COLLATE LANGUAGE=en_US.UTF-8 LANG=en_US.UTF-8 LOCALE_ARCHIVE=/usr/lib/locale/locale-archive su -c " . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh && $PGBINNEW /initdb --encoding=$SERVER_ENCODING --lc-collate=$SERVER_LC_COLLATE --lc-ctype=$SERVER_LC_CTYPE -L $PGSHARENEW -D $PGDATANEW / --username=supabase_admin " -s " $SHELL " postgres
379
386
else
380
- su -c " $PGBINNEW /initdb -L $PGSHARENEW -D $PGDATANEW /" -s " $SHELL " postgres
387
+ su -c " $PGBINNEW /initdb -L $PGSHARENEW -D $PGDATANEW / --username=supabase_admin " -s " $SHELL " postgres
381
388
fi
382
389
390
+ # This line avoids the need to supply the supabase_admin password on the old
391
+ # instance, since pg_upgrade connects to the db as supabase_admin using unix
392
+ # sockets, which is gated behind scram-sha-256 per pg_hba.conf.j2. The new
393
+ # instance is unaffected.
394
+ echo " local all supabase_admin trust
395
+ $( cat /etc/postgresql/pg_hba.conf) " > /etc/postgresql/pg_hba.conf
396
+ run_sql -c " select pg_reload_conf();"
397
+
383
398
UPGRADE_COMMAND=$( cat << EOF
384
399
time ${PGBINNEW} /pg_upgrade \
385
400
--old-bindir="${PGBINOLD} " \
386
401
--new-bindir=${PGBINNEW} \
387
402
--old-datadir=${PGDATAOLD} \
388
403
--new-datadir=${PGDATANEW} \
404
+ --username=supabase_admin \
389
405
--jobs="${WORKERS} " -r \
390
406
--old-options='-c config_file=${POSTGRES_CONFIG_PATH} ' \
391
407
--old-options="-c shared_preload_libraries='${SHARED_PRELOAD_LIBRARIES} '" \
0 commit comments