114 lines
4.5 KiB
SQL
114 lines
4.5 KiB
SQL
-- Remove somente os objetos conhecidos de adaptador_guard.
|
|
-- Recusa se faltar peça, se houver objeto estranho ou se outro schema depender da identidade.
|
|
-- Não apaga auth, storage, public nem app.settings.jwt_exp.
|
|
-- O bloco e os DROP seguem juntos: se a conferência falhar, nada é removido.
|
|
|
|
do $revert$
|
|
begin
|
|
if not exists (select 1 from pg_catalog.pg_namespace where nspname = 'adaptador_guard') then
|
|
raise exception 'marcador_ausente' using errcode = 'P0002';
|
|
end if;
|
|
if exists (
|
|
select kind, name
|
|
from (
|
|
select 'missing'::text as kind, 'project_identity'::text as name
|
|
where exists (select 1 from pg_catalog.pg_namespace where nspname = 'adaptador_guard')
|
|
and not exists (
|
|
select 1
|
|
from pg_catalog.pg_class c
|
|
join pg_catalog.pg_namespace n on n.oid = c.relnamespace
|
|
where n.nspname = 'adaptador_guard' and c.relname = 'project_identity' and c.relkind = 'r'
|
|
)
|
|
union all
|
|
select 'missing', 'adapter_project_identity'
|
|
where exists (select 1 from pg_catalog.pg_namespace where nspname = 'adaptador_guard')
|
|
and not exists (
|
|
select 1
|
|
from pg_catalog.pg_proc p
|
|
join pg_catalog.pg_namespace n on n.oid = p.pronamespace
|
|
where n.nspname = 'adaptador_guard' and p.proname = 'adapter_project_identity'
|
|
)
|
|
union all
|
|
select 'missing', 'reject_identity_change'
|
|
where exists (select 1 from pg_catalog.pg_namespace where nspname = 'adaptador_guard')
|
|
and not exists (
|
|
select 1
|
|
from pg_catalog.pg_proc p
|
|
join pg_catalog.pg_namespace n on n.oid = p.pronamespace
|
|
where n.nspname = 'adaptador_guard' and p.proname = 'reject_identity_change'
|
|
)
|
|
union all
|
|
select 'unknown_relation', c.relname
|
|
from pg_catalog.pg_class c
|
|
join pg_catalog.pg_namespace n on n.oid = c.relnamespace
|
|
where n.nspname = 'adaptador_guard'
|
|
and not (
|
|
(c.relname = 'project_identity' and c.relkind = 'r')
|
|
or (
|
|
c.relkind = 'i'
|
|
and exists (
|
|
select 1
|
|
from pg_catalog.pg_index i
|
|
join pg_catalog.pg_class t on t.oid = i.indrelid
|
|
where i.indexrelid = c.oid
|
|
and t.relname = 'project_identity'
|
|
and t.relnamespace = n.oid
|
|
)
|
|
)
|
|
)
|
|
union all
|
|
select 'unknown_function', p.proname
|
|
from pg_catalog.pg_proc p
|
|
join pg_catalog.pg_namespace n on n.oid = p.pronamespace
|
|
where n.nspname = 'adaptador_guard'
|
|
and p.proname not in ('adapter_project_identity', 'reject_identity_change')
|
|
union all
|
|
select 'unknown_type', t.typname
|
|
from pg_catalog.pg_type t
|
|
join pg_catalog.pg_namespace n on n.oid = t.typnamespace
|
|
where n.nspname = 'adaptador_guard'
|
|
and not exists (
|
|
select 1
|
|
from pg_catalog.pg_class c
|
|
where c.oid = t.typrelid
|
|
and c.relname = 'project_identity'
|
|
and c.relnamespace = n.oid
|
|
)
|
|
and not exists (
|
|
select 1
|
|
from pg_catalog.pg_type elem
|
|
join pg_catalog.pg_class c on c.oid = elem.typrelid
|
|
where elem.oid = t.typelem
|
|
and c.relname = 'project_identity'
|
|
and c.relnamespace = n.oid
|
|
)
|
|
union all
|
|
select 'external', vn.nspname || '.' || v.relname
|
|
from pg_catalog.pg_depend d
|
|
join pg_catalog.pg_rewrite rw on rw.oid = d.objid
|
|
join pg_catalog.pg_class v on v.oid = rw.ev_class
|
|
join pg_catalog.pg_namespace vn on vn.oid = v.relnamespace
|
|
join pg_catalog.pg_class t on t.oid = d.refobjid
|
|
join pg_catalog.pg_namespace tn on tn.oid = t.relnamespace
|
|
where tn.nspname = 'adaptador_guard'
|
|
and vn.nspname <> 'adaptador_guard'
|
|
union all
|
|
select 'external', n.nspname || '.' || p.proname
|
|
from pg_catalog.pg_depend d
|
|
join pg_catalog.pg_proc p on p.oid = d.objid
|
|
join pg_catalog.pg_namespace n on n.oid = p.pronamespace
|
|
join pg_catalog.pg_class t on t.oid = d.refobjid
|
|
join pg_catalog.pg_namespace tn on tn.oid = t.relnamespace
|
|
where tn.nspname = 'adaptador_guard'
|
|
and n.nspname <> 'adaptador_guard'
|
|
) findings
|
|
) then
|
|
raise exception 'reversao_recusada' using errcode = '55000';
|
|
end if;
|
|
end
|
|
$revert$;
|
|
drop function adaptador_guard.adapter_project_identity();
|
|
drop table adaptador_guard.project_identity;
|
|
drop function adaptador_guard.reject_identity_change();
|
|
drop schema adaptador_guard restrict;
|