-- Migration: Add id column to song table and change PK from composite to single column -- This prepares the song table for eventual UUID migration -- Step 1: Add new id column (nullable initially) ALTER TABLE song ADD COLUMN id serial4; -- Step 2: Create unique constraint on id (allows backfilling) ALTER TABLE song ADD CONSTRAINT song_id_unique UNIQUE (id); -- Step 3: Backfill existing rows with sequential IDs -- Use DEFAULT which pulls from the sequence UPDATE song SET id = DEFAULT WHERE id IS NULL; -- Step 4: Verify all rows have an id -- If this returns 0, backfill worked -- SELECT COUNT(*) FROM song WHERE id IS NULL; -- Step 5: Drop the composite primary key (soundtrack_id, path) ALTER TABLE song DROP CONSTRAINT song_pkey; -- Step 6: Add new primary key on id column ALTER TABLE song ADD CONSTRAINT song_pkey PRIMARY KEY (id); -- Step 7: Ensure soundtrack_id remains a foreign key to soundtrack -- First drop existing FK if it exists (from the rename migration) ALTER TABLE song DROP CONSTRAINT IF EXISTS song_soundtrack_id_fkey; -- Then recreate it ALTER TABLE song ADD CONSTRAINT song_soundtrack_id_fkey FOREIGN KEY (soundtrack_id) REFERENCES soundtrack(id); -- Step 8: Create index on soundtrack_id for query performance CREATE INDEX IF NOT EXISTS idx_song_soundtrack_id ON song(soundtrack_id); -- Step 9: Create index on path for lookups (previously part of PK) CREATE INDEX IF NOT EXISTS idx_song_path ON song(path);