Fixes task project rename command by adding ON UPDATE CASCADE to all foreign key constraints that reference projects(key). Updated 10 FK constraints: task_sequences, epic_sequences, versions, epics, tasks, project_locks, project_archives, sessions, session_sequences, project_documentation. Migration drops old constraints and adds new ones with both ON DELETE CASCADE and ON UPDATE CASCADE (except sessions which uses ON DELETE SET NULL). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
110 lines
3.2 KiB
SQL
110 lines
3.2 KiB
SQL
-- Migration 023: Add ON UPDATE CASCADE to all projects foreign keys
|
|
-- Allows project key updates (rename) to cascade to all dependent tables
|
|
-- Fixes: CF-518 - task project rename command fails due to FK constraints
|
|
|
|
-- Fix task_sequences table
|
|
ALTER TABLE task_sequences
|
|
DROP CONSTRAINT IF EXISTS task_sequences_project_fkey;
|
|
|
|
ALTER TABLE task_sequences
|
|
ADD CONSTRAINT task_sequences_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix epic_sequences table
|
|
ALTER TABLE epic_sequences
|
|
DROP CONSTRAINT IF EXISTS epic_sequences_project_fkey;
|
|
|
|
ALTER TABLE epic_sequences
|
|
ADD CONSTRAINT epic_sequences_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix versions table
|
|
ALTER TABLE versions
|
|
DROP CONSTRAINT IF EXISTS versions_project_fkey;
|
|
|
|
ALTER TABLE versions
|
|
ADD CONSTRAINT versions_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix epics table
|
|
ALTER TABLE epics
|
|
DROP CONSTRAINT IF EXISTS epics_project_fkey;
|
|
|
|
ALTER TABLE epics
|
|
ADD CONSTRAINT epics_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix tasks table
|
|
ALTER TABLE tasks
|
|
DROP CONSTRAINT IF EXISTS tasks_project_fkey;
|
|
|
|
ALTER TABLE tasks
|
|
ADD CONSTRAINT tasks_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix project_locks table (from migration 004)
|
|
ALTER TABLE project_locks
|
|
DROP CONSTRAINT IF EXISTS project_locks_project_fkey;
|
|
|
|
ALTER TABLE project_locks
|
|
ADD CONSTRAINT project_locks_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix project_archives table (from migration 009)
|
|
ALTER TABLE project_archives
|
|
DROP CONSTRAINT IF EXISTS project_archives_project_key_fkey;
|
|
|
|
ALTER TABLE project_archives
|
|
ADD CONSTRAINT project_archives_project_key_fkey
|
|
FOREIGN KEY (project_key) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix sessions table (from migration 010)
|
|
-- Note: sessions.project uses ON DELETE SET NULL, so we use ON UPDATE CASCADE
|
|
ALTER TABLE sessions
|
|
DROP CONSTRAINT IF EXISTS sessions_project_fkey;
|
|
|
|
ALTER TABLE sessions
|
|
ADD CONSTRAINT sessions_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE SET NULL
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix session_sequences table (from migration 010)
|
|
ALTER TABLE session_sequences
|
|
DROP CONSTRAINT IF EXISTS session_sequences_project_fkey;
|
|
|
|
ALTER TABLE session_sequences
|
|
ADD CONSTRAINT session_sequences_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Fix project_documentation table (from migration 016)
|
|
ALTER TABLE project_documentation
|
|
DROP CONSTRAINT IF EXISTS project_documentation_project_fkey;
|
|
|
|
ALTER TABLE project_documentation
|
|
ADD CONSTRAINT project_documentation_project_fkey
|
|
FOREIGN KEY (project) REFERENCES projects(key)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE;
|
|
|
|
-- Record migration
|
|
INSERT INTO schema_migrations (version, applied_at)
|
|
VALUES ('023_fix_task_sequences_cascade', NOW())
|
|
ON CONFLICT DO NOTHING;
|