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:
Arthur Belleville 2026-03-04 21:54:37 +01:00
parent 521772becb
commit 0c4e9c1301
No known key found for this signature in database

View file

@ -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;
$$;