@@ -88,7 +88,17 @@ CI_start_postgres() {
88
88
89
89
swap_postgres_and_supabase_admin () {
90
90
run_sql << 'EOSQL '
91
- alter database postgres connection limit 0;
91
+ do $$
92
+ declare
93
+ rec record;
94
+ begin
95
+ for rec in
96
+ select * from pg_database
97
+ loop
98
+ execute(format('alter database %I connection limit 0', datname));
99
+ end loop;
100
+ end
101
+ $$;
92
102
select pg_terminate_backend(pid) from pg_stat_activity where backend_type = 'client backend' and pid != pg_backend_pid();
93
103
EOSQL
94
104
@@ -203,8 +213,11 @@ begin
203
213
end
204
214
$$;
205
215
206
- -- Swap postgres & supabase_admin on in-database objects (schemas, tables, functions, etc.).
207
216
do $$
217
+ declare
218
+ swap_postgres_supabase_admin_on_in_database_objects_script text := $script$
219
+ -- Swap postgres & supabase_admin on in-database objects (schemas, tables, functions, etc.).
220
+ do $script_do$
208
221
declare
209
222
event_triggers jsonb[] := (select coalesce(array_agg(jsonb_build_object('name', evtname)), '{}') from pg_event_trigger where evtowner = 'supabase_admin'::regrole);
210
223
user_mappings jsonb[] := (
@@ -561,9 +574,45 @@ begin
561
574
alter event trigger pgsodium_trg_mask_update enable;
562
575
end if;
563
576
end
577
+ $script_do$;
578
+ $script$;
579
+ dblink_schema text := (select extnamespace::regnamespace from pg_extension where extname = 'dblink');
580
+ rec record;
581
+ begin
582
+ execute swap_postgres_supabase_admin_on_in_database_objects_script;
583
+
584
+ create schema _supabase_dblink;
585
+ if dblink_schema is null then
586
+ create extension dblink schema _supabase_dblink;
587
+ else
588
+ alter extension dblink set schema _supabase_dblink;
589
+ end if;
590
+
591
+ -- Don't touch template0
592
+ for rec in
593
+ select * from pg_database where datname not in ('postgres', 'template0')
594
+ loop
595
+ perform _supabase_dblink.dblink_exec('dbname=' || quote_ident(rec.datname), swap_postgres_supabase_admin_on_in_database_objects_script)
596
+ end loop;
597
+
598
+ if dblink_schema is not null then
599
+ execute(format('alter extension dblink set schema %s', dblink_schema));
600
+ end if;
601
+ drop schema _supabase_dblink cascade;
602
+ end
564
603
$$;
565
604
566
- alter database postgres connection limit -1;
605
+ do $$
606
+ declare
607
+ rec record;
608
+ begin
609
+ for rec in
610
+ select * from pg_database
611
+ loop
612
+ execute(format('alter database %I connection limit -1', datname));
613
+ end loop;
614
+ end
615
+ $$;
567
616
568
617
set session authorization supabase_admin;
569
618
drop role supabase_tmp;
0 commit comments