Files
probo/pkg/coredata/migrations/20260414T125046Z.sql
Sacha Al Himdani c32aff5e9e Add migration to deduplicate connectors and enforce uniqueness
Delete duplicate connectors per (organization_id, provider), keeping the
oldest one, then add a unique index to prevent future duplicates.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-20 15:07:30 +02:00

43 lines
1.9 KiB
SQL

-- Copyright (c) 2026 Probo Inc <hello@getprobo.com>.
--
-- Permission to use, copy, modify, and/or distribute this software for any
-- purpose with or without fee is hereby granted, provided that the above
-- copyright notice and this permission notice appear in all copies.
--
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-- PERFORMANCE OF THIS SOFTWARE.
-- Deduplicate connectors per (organization_id, provider), keeping the oldest one.
-- Temporarily switch access_sources FK to CASCADE for cleanup, then restore RESTRICT.
-- Swap FK to CASCADE so deleting duplicate connectors cascades to their access_sources.
ALTER TABLE access_sources DROP CONSTRAINT access_sources_connector_id_fkey;
ALTER TABLE access_sources ADD CONSTRAINT access_sources_connector_id_fkey
FOREIGN KEY (connector_id) REFERENCES connectors(id) ON DELETE CASCADE;
-- Delete the duplicate connectors (access_sources will cascade).
DELETE FROM connectors
WHERE id IN (
SELECT id FROM (
SELECT id,
ROW_NUMBER() OVER (
PARTITION BY organization_id, provider
ORDER BY created_at ASC
) AS rn
FROM connectors
) ranked
WHERE rn > 1
);
-- Restore FK to RESTRICT.
ALTER TABLE access_sources DROP CONSTRAINT access_sources_connector_id_fkey;
ALTER TABLE access_sources ADD CONSTRAINT access_sources_connector_id_fkey
FOREIGN KEY (connector_id) REFERENCES connectors(id);
CREATE UNIQUE INDEX idx_connectors_organization_id_provider ON connectors (organization_id, provider);