Enhance recovery mechanism for orphaned tablos by managing triggers
- Introduce logic to temporarily disable the notify_users_on_tablos trigger during the update of orphaned tablos to prevent unwanted notifications. - Ensure that the trigger is re-enabled after the update, even in case of exceptions, maintaining database integrity.
This commit is contained in:
parent
521772becb
commit
0c4e9c1301
1 changed files with 28 additions and 3 deletions
|
|
@ -139,15 +139,40 @@ WHERE p.id = t.owner_id
|
|||
DO $$
|
||||
DECLARE
|
||||
recovery_organization_id integer;
|
||||
has_notify_trigger boolean;
|
||||
BEGIN
|
||||
IF EXISTS (SELECT 1 FROM public.tablos WHERE organization_id IS NULL) THEN
|
||||
INSERT INTO public.organizations (name)
|
||||
VALUES ('Recovered Legacy Workspace')
|
||||
RETURNING id INTO recovery_organization_id;
|
||||
|
||||
UPDATE public.tablos t
|
||||
SET organization_id = recovery_organization_id
|
||||
WHERE t.organization_id IS NULL;
|
||||
SELECT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_trigger
|
||||
WHERE tgrelid = 'public.tablos'::regclass
|
||||
AND tgname = 'notify_users_on_tablos'
|
||||
AND NOT tgisinternal
|
||||
) INTO has_notify_trigger;
|
||||
|
||||
BEGIN
|
||||
IF has_notify_trigger THEN
|
||||
EXECUTE 'ALTER TABLE public.tablos DISABLE TRIGGER notify_users_on_tablos';
|
||||
END IF;
|
||||
|
||||
UPDATE public.tablos t
|
||||
SET organization_id = recovery_organization_id
|
||||
WHERE t.organization_id IS NULL;
|
||||
|
||||
IF has_notify_trigger THEN
|
||||
EXECUTE 'ALTER TABLE public.tablos ENABLE TRIGGER notify_users_on_tablos';
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
IF has_notify_trigger THEN
|
||||
EXECUTE 'ALTER TABLE public.tablos ENABLE TRIGGER notify_users_on_tablos';
|
||||
END IF;
|
||||
RAISE;
|
||||
END;
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||
|
|
|
|||
Loading…
Reference in a new issue