Skip to content

Commit b6a5b1e

Browse files
committed
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.
1 parent 00cf915 commit b6a5b1e

File tree

1 file changed

+46
-0
lines changed
  • ansible/files/admin_api_scripts/pg_upgrade_scripts

1 file changed

+46
-0
lines changed

ansible/files/admin_api_scripts/pg_upgrade_scripts/complete.sh

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,45 @@ function execute_extension_upgrade_patches {
3232
fi
3333
}
3434

35+
function execute_wrappers_patch {
36+
# If upgrading to pgsodium-less Vault, Wrappers need to be updated so that
37+
# foreign servers use `vault.secrets.id` instead of `vault.secrets.key_id`
38+
UPDATE_WRAPPERS_SERVER_OPTIONS_QUERY=$(cat <<EOF
39+
DO \$\$
40+
DECLARE
41+
server_rec RECORD;
42+
option_rec RECORD;
43+
vault_secrets RECORD;
44+
BEGIN
45+
IF EXISTS (SELECT FROM pg_available_extension_versions WHERE name = 'wrappers' AND version = '0.4.6')
46+
AND EXISTS (SELECT FROM pg_extension WHERE extname = 'wrappers')
47+
THEN
48+
FOR server_rec IN
49+
SELECT srvname, srvoptions
50+
FROM pg_foreign_server
51+
LOOP
52+
FOR option_rec IN
53+
SELECT split_part(srvoption, '=', 1) AS option_name, split_part(srvoption, '=', 2) AS option_value
54+
FROM UNNEST(server_rec.srvoptions) AS srvoption
55+
LOOP
56+
IF EXISTS (SELECT FROM vault.secrets WHERE option_rec.option_value IN (id::text, key_id::text)) THEN
57+
EXECUTE format(
58+
'ALTER SERVER %I OPTIONS (SET %I %L)',
59+
server_rec.srvname,
60+
option_rec.option_name,
61+
(SELECT id FROM vault.secrets WHERE option_rec.option_value IN (id::text, key_id::text))
62+
);
63+
END IF;
64+
END LOOP;
65+
END LOOP;
66+
END IF;
67+
END;
68+
\$\$;
69+
EOF
70+
)
71+
run_sql -c "$UPDATE_WRAPPERS_SERVER_OPTIONS_QUERY"
72+
}
73+
3574
function execute_patches {
3675
# Patch pg_net grants
3776
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 {
220259

221260
execute_extension_upgrade_patches || true
222261

262+
# For this to work we need `vault.secrets` from the old project to be
263+
# preserved, but `run_generated_sql` includes `ALTER EXTENSION
264+
# supabase_vault UPDATE` which modifies that. So we need to run it
265+
# beforehand.
266+
echo "3.1. Patch Wrappers server options"
267+
execute_wrappers_patch
268+
223269
echo "4. Running generated SQL files"
224270
retry 3 run_generated_sql
225271

0 commit comments

Comments
 (0)