Skip to content

Commit 22ce935

Browse files
soedirgojfroche
andauthored
fix: update ext custom scripts to follow changes in Salt (#1870)
* fix: update ext custom scripts to follow changes in Salt * fix: include changes to search_path manipulation * fix: nixos test running pg_regress for pgmq Configure default `search_path` parameter for postgresql running in the nixos test environment. * fix: nixos test running pg_regress for vault Configure default `search_path` parameter for postgresql running in the nixos test environment. --------- Co-authored-by: Jean-François Roche <[email protected]>
1 parent 578be5d commit 22ce935

File tree

8 files changed

+62
-12
lines changed

8 files changed

+62
-12
lines changed

ansible/files/postgresql_extension_custom_scripts/pgmq/after-create.sql

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
do $$
22
declare
33
extoid oid := (select oid from pg_extension where extname = 'pgmq');
4+
extversion text := (select extversion from pg_extension where extname = 'pgmq');
5+
search_path text := (select current_setting('search_path'));
46
r record;
57
cls pg_class%rowtype;
68
begin
7-
8-
set local search_path = '';
9+
perform set_config('search_path', '', true);
910

1011
/*
1112
Override the pgmq.drop_queue to check if relevant tables are owned
@@ -18,8 +19,13 @@ begin
1819
physical backups everywhere
1920
*/
2021
-- Detach and delete the official function
21-
alter extension pgmq drop function pgmq.drop_queue(TEXT);
22-
drop function pgmq.drop_queue(TEXT);
22+
if extversion = '1.4.4' then
23+
alter extension pgmq drop function pgmq.drop_queue;
24+
drop function pgmq.drop_queue;
25+
else -- 1.5.1+
26+
alter extension pgmq drop function pgmq.drop_queue(TEXT);
27+
drop function pgmq.drop_queue(TEXT);
28+
end if;
2329

2430
-- Create and reattach the patched function
2531
CREATE FUNCTION pgmq.drop_queue(queue_name TEXT)
@@ -134,7 +140,11 @@ BEGIN
134140
END;
135141
$func$ LANGUAGE plpgsql;
136142

137-
alter extension pgmq add function pgmq.drop_queue(TEXT);
143+
if extversion = '1.4.4' then
144+
alter extension pgmq add function pgmq.drop_queue;
145+
else -- 1.5.1+
146+
alter extension pgmq add function pgmq.drop_queue(TEXT);
147+
end if;
138148

139149

140150
update pg_extension set extowner = 'postgres'::regrole where extname = 'pgmq';
@@ -170,4 +180,7 @@ alter extension pgmq add function pgmq.drop_queue(TEXT);
170180

171181
end if;
172182
end loop;
183+
184+
-- restore configs
185+
perform set_config('search_path', search_path, true);
173186
end $$;
Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
1-
grant usage on schema vault to postgres with grant option;
2-
grant select, delete, truncate, references on vault.secrets, vault.decrypted_secrets to postgres with grant option;
3-
grant execute on function vault.create_secret, vault.update_secret, vault._crypto_aead_det_decrypt to postgres with grant option;
1+
do $$
2+
declare
3+
extversion text := (select extversion from pg_extension where extname = 'supabase_vault');
4+
search_path text := (select current_setting('search_path'));
5+
begin
6+
perform set_config('search_path', '', true);
47

5-
-- service_role used to be able to manage secrets in Vault <=0.2.8 because it had privileges to pgsodium functions
6-
grant usage on schema vault to service_role;
7-
grant select, delete on vault.secrets, vault.decrypted_secrets to service_role;
8-
grant execute on function vault.create_secret, vault.update_secret, vault._crypto_aead_det_decrypt to service_role;
8+
if extversion != '0.2.8' then
9+
grant usage on schema vault to postgres with grant option;
10+
grant select, delete, truncate, references on vault.secrets, vault.decrypted_secrets to postgres with grant option;
11+
grant execute on function vault.create_secret, vault.update_secret, vault._crypto_aead_det_decrypt to postgres with grant option;
12+
13+
-- service_role used to be able to manage secrets in Vault <=0.2.8 because it had privileges to pgsodium functions
14+
grant usage on schema vault to service_role;
15+
grant select, delete on vault.secrets, vault.decrypted_secrets to service_role;
16+
grant execute on function vault.create_secret, vault.update_secret, vault._crypto_aead_det_decrypt to service_role;
17+
end if;
18+
19+
-- restore configs
20+
perform set_config('search_path', search_path, true);
21+
end $$;

nix/ext/pgmq/default.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ buildEnv {
100100

101101
passthru = {
102102
inherit versions numberOfVersions;
103+
defaultSettings = {
104+
search_path = "\"$user\", public, auth, extensions";
105+
};
103106
pname = "${pname}-all";
104107
version =
105108
"multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions);

nix/ext/tests/vault.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ self.inputs.nixpkgs.lib.nixos.runTest {
8484
settings = {
8585
"shared_preload_libraries" = "${pname},pgsodium";
8686
"pgsodium.getkey_script" = vaultGetKey;
87+
"search_path" = "\"$user\", public, auth, extensions";
8788
"vault.getkey_script" = vaultGetKey;
8889
};
8990
};

nix/tests/expected/pgmq.out

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,3 +200,10 @@ order by
200200
pgmq | validate_queue_name | postgres
201201
(40 rows)
202202

203+
-- assert search_path is preserved after after-create script is run
204+
show search_path;
205+
search_path
206+
-----------------------------------
207+
"$user", public, auth, extensions
208+
(1 row)
209+

nix/tests/expected/vault.out

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,10 @@ ORDER BY
9797
vault | secrets | secrets_pkey | supabase_admin | Unique
9898
(2 rows)
9999

100+
-- assert search_path is preserved after after-create script is run
101+
show search_path;
102+
search_path
103+
-----------------------------------
104+
"$user", public, auth, extensions
105+
(1 row)
106+

nix/tests/sql/pgmq.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,6 @@ where
101101
n.nspname = 'pgmq'
102102
order by
103103
p.proname;
104+
105+
-- assert search_path is preserved after after-create script is run
106+
show search_path;

nix/tests/sql/vault.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,6 @@ WHERE
5151
ORDER BY
5252
t.relname,
5353
i.relname;
54+
55+
-- assert search_path is preserved after after-create script is run
56+
show search_path;

0 commit comments

Comments
 (0)