@@ -32,6 +32,45 @@ function execute_extension_upgrade_patches {
32
32
fi
33
33
}
34
34
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
+
35
74
function execute_patches {
36
75
# Patch pg_net grants
37
76
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 {
220
259
221
260
execute_extension_upgrade_patches || true
222
261
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
+
223
269
echo " 4. Running generated SQL files"
224
270
retry 3 run_generated_sql
225
271
0 commit comments