supabase-postgres.git / summary / log / commit / refs
commit b6a5b1e9681810ef4e43cd0969b697fc72cd510c
Author: Bobbie Soedirgo <bobbie@soedirgo.dev>
Commit: Bobbie Soedirgo <31685197+soedirgo@users.noreply.github.com>
Date: Wed Apr 16 06:49:25 2025 +0000
fix: update wrappers server options post-upgrade
Wrappers were previously using `vault.secrets.key_id`, which will no
longer work with new Vault; we migrate it to use `vault.secrets.id` instead.
.../pg_upgrade_scripts/complete.sh | 46 ++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/ansible/files/admin_api_scripts/pg_upgrade_scripts/complete.sh b/ansible/files/admin_api_scripts/pg_upgrade_scripts/complete.sh
index cd6c1f06..a1d37e7c 100755
--- a/ansible/files/admin_api_scripts/pg_upgrade_scripts/complete.sh
+++ b/ansible/files/admin_api_scripts/pg_upgrade_scripts/complete.sh
@@ -32,6 +32,45 @@ function execute_extension_upgrade_patches {
fi
}
+function execute_wrappers_patch {
+ # If upgrading to pgsodium-less Vault, Wrappers need to be updated so that
+ # foreign servers use `vault.secrets.id` instead of `vault.secrets.key_id`
+ UPDATE_WRAPPERS_SERVER_OPTIONS_QUERY=$(cat <<EOF
+ DO \$\$
+ DECLARE
+ server_rec RECORD;
+ option_rec RECORD;
+ vault_secrets RECORD;
+ BEGIN
+ IF EXISTS (SELECT FROM pg_available_extension_versions WHERE name = 'wrappers' AND version = '0.4.6')
+ AND EXISTS (SELECT FROM pg_extension WHERE extname = 'wrappers')
+ THEN
+ FOR server_rec IN
+ SELECT srvname, srvoptions
+ FROM pg_foreign_server
+ LOOP
+ FOR option_rec IN
+ SELECT split_part(srvoption, '=', 1) AS option_name, split_part(srvoption, '=', 2) AS option_value
+ FROM UNNEST(server_rec.srvoptions) AS srvoption
+ LOOP
+ IF EXISTS (SELECT FROM vault.secrets WHERE option_rec.option_value IN (id::text, key_id::text)) THEN
+ EXECUTE format(
+ 'ALTER SERVER %I OPTIONS (SET %I %L)',
+ server_rec.srvname,
+ option_rec.option_name,
+ (SELECT id FROM vault.secrets WHERE option_rec.option_value IN (id::text, key_id::text))
+ );
+ END IF;
+ END LOOP;
+ END LOOP;
+ END IF;
+ END;
+ \$\$;
+EOF
+ )
+ run_sql -c "$UPDATE_WRAPPERS_SERVER_OPTIONS_QUERY"
+}
+
function execute_patches {
# Patch pg_net grants
PG_NET_ENABLED=$(run_sql -A -t -c "select count(*) > 0 from pg_extension where extname = 'pg_net';")
@@ -220,6 +259,13 @@ function complete_pg_upgrade {
execute_extension_upgrade_patches || true
+ # For this to work we need `vault.secrets` from the old project to be
+ # preserved, but `run_generated_sql` includes `ALTER EXTENSION
+ # supabase_vault UPDATE` which modifies that. So we need to run it
+ # beforehand.
+ echo "3.1. Patch Wrappers server options"
+ execute_wrappers_patch
+
echo "4. Running generated SQL files"
retry 3 run_generated_sql
[parent: 00cf91534e77]