@@ -323,9 +323,9 @@ declare
323
323
supabase_admin_rolpassword text := (select rolpassword from pg_authid where rolname = 'supabase_admin');
324
324
postgres_role_settings text[] := (select setconfig from pg_db_role_setting where setdatabase = 0 and setrole = 'postgres'::regrole);
325
325
supabase_admin_role_settings text[] := (select setconfig from pg_db_role_setting where setdatabase = 0 and setrole = 'supabase_admin'::regrole);
326
- schemas oid [] := (select coalesce(array_agg(oid), '{}') from pg_namespace where nspowner = 'postgres'::regrole);
327
- types oid [] := (
328
- select coalesce(array_agg(t.oid), '{}')
326
+ schemas jsonb [] := (select coalesce(array_agg(jsonb_build_object(' oid', oid, 'acl', nspacl::text) ), '{}') from pg_namespace where nspowner = 'postgres'::regrole);
327
+ types jsonb [] := (
328
+ select coalesce(array_agg(jsonb_build_object('oid', t.oid, 'acl', t.typacl::text) ), '{}')
329
329
from pg_type t
330
330
join pg_namespace n on n.oid = t.typnamespace
331
331
join pg_authid a on a.oid = t.typowner
@@ -353,8 +353,8 @@ declare
353
353
and el.typarray = t.oid
354
354
)
355
355
);
356
- routines oid [] := (
357
- select coalesce(array_agg(p.oid), '{}')
356
+ routines jsonb [] := (
357
+ select coalesce(array_agg(jsonb_build_object('oid', p.oid, 'acl', p.proacl::text) ), '{}')
358
358
from pg_proc p
359
359
join pg_namespace n on n.oid = p.pronamespace
360
360
join pg_authid a on a.oid = p.proowner
@@ -363,8 +363,8 @@ declare
363
363
and not starts_with(n.nspname, 'pg_')
364
364
and a.rolname = 'postgres'
365
365
);
366
- relations oid [] := (
367
- select coalesce(array_agg(c.oid), '{}')
366
+ relations jsonb [] := (
367
+ select coalesce(array_agg(jsonb_build_object('oid', c.oid, 'acl', c.relacl::text) ), '{}')
368
368
from pg_class c
369
369
join pg_namespace n on n.oid = c.relnamespace
370
370
join pg_authid a on a.oid = c.relowner
@@ -375,7 +375,7 @@ declare
375
375
and c.relkind not in ('c', 'i')
376
376
);
377
377
rec record;
378
- objid oid ;
378
+ obj jsonb ;
379
379
begin
380
380
set local search_path = '';
381
381
@@ -462,29 +462,36 @@ begin
462
462
update pg_default_acl set defaclrole = 'supabase_admin'::regrole where defaclrole = 0;
463
463
464
464
-- schemas
465
- foreach objid in array schemas
465
+ foreach obj in array schemas
466
466
loop
467
- execute(format('alter schema %I owner to postgres;', objid::regnamespace));
467
+ execute(format('alter schema %s owner to postgres;', (obj->>'oid')::regnamespace));
468
+ -- TODO: don't modify system catalog directly
469
+ update pg_namespace set nspacl = (obj->>'acl')::aclitem[] where nspname = obj->>'oid';
468
470
end loop;
469
471
470
472
-- types
471
- foreach objid in array types
473
+ foreach obj in array types
472
474
loop
473
- execute(format('alter type %I owner to postgres;', objid::regtype));
475
+ execute(format('alter type %s owner to postgres;', (obj->>'oid')::regtype));
476
+ -- TODO: don't modify system catalog directly
477
+ update pg_type set typacl = (obj->>'acl')::aclitem[] where oid = obj->>'oid';
474
478
end loop;
475
479
476
480
-- functions
477
- for rec in
478
- select * from pg_proc where oid = any(routines)
481
+ foreach obj in array routines
479
482
loop
480
- execute(format('alter routine %I.%I(%s) owner to postgres;', rec.pronamespace::regnamespace, rec.proname, pg_get_function_identity_arguments(rec.oid)));
483
+ execute(format('alter routine %s(%s) owner to postgres;', (obj->>'oid')::regproc, pg_get_function_identity_arguments((obj->>'oid')::regproc)));
484
+ -- TODO: don't modify system catalog directly
485
+ update pg_proc set proacl = (obj->>'acl')::aclitem[] where oid = (obj->>'oid')::regproc;
481
486
end loop;
482
487
483
488
-- relations
484
- for rec in
485
- select * from pg_class where oid = any(relations)
489
+ foreach obj in array relations
486
490
loop
487
- execute(format('alter table %I.%I owner to postgres;', rec.relnamespace::regnamespace, rec.relname));
491
+ -- obj->>'oid' (text) needs to be casted to oid first for some reason
492
+ execute(format('alter table %s owner to postgres;', (obj->>'oid')::oid::regclass));
493
+ -- TODO: don't modify system catalog directly
494
+ update pg_class set relacl = (obj->>'acl')::aclitem[] where oid = (obj->>'oid')::oid::regclass;
488
495
end loop;
489
496
end
490
497
$$;
0 commit comments