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>
This commit is contained in:
42
pkg/coredata/migrations/20260414T125046Z.sql
Normal file
42
pkg/coredata/migrations/20260414T125046Z.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
-- 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);
|
||||
Reference in New Issue
Block a user