From 0c4e9c1301db54d11e1a5d18197caf2f1c520020 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Wed, 4 Mar 2026 21:54:37 +0100 Subject: [PATCH] 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. --- ...add_organizations_and_org_owned_tablos.sql | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/supabase/migrations/20260304221500_add_organizations_and_org_owned_tablos.sql b/supabase/migrations/20260304221500_add_organizations_and_org_owned_tablos.sql index 2eb6daf..1bb82d1 100644 --- a/supabase/migrations/20260304221500_add_organizations_and_org_owned_tablos.sql +++ b/supabase/migrations/20260304221500_add_organizations_and_org_owned_tablos.sql @@ -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; $$;