up
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
-- +goose Up
|
||||
-- Finish venue transfers and back up all databases before this coordinated upgrade.
|
||||
CREATE TEMP TABLE team_id_mapping (
|
||||
old_id INTEGER PRIMARY KEY,
|
||||
new_id UUID NOT NULL UNIQUE
|
||||
) ON COMMIT DROP;
|
||||
|
||||
-- PostgreSQL 15 lacks uuidv7(); this one-time migration fills v7 time bits in a random UUID.
|
||||
INSERT INTO team_id_mapping (old_id, new_id)
|
||||
SELECT
|
||||
id,
|
||||
overlay(
|
||||
overlay(
|
||||
replace(gen_random_uuid()::text, '-', '')
|
||||
placing lpad(to_hex(floor(extract(epoch FROM clock_timestamp()) * 1000)::bigint), 12, '0')
|
||||
from 1 for 12
|
||||
)
|
||||
placing '7' from 13 for 1
|
||||
)::uuid
|
||||
FROM teams;
|
||||
|
||||
-- +goose StatementBegin
|
||||
CREATE FUNCTION pg_temp.team_uuid(old_id INTEGER) RETURNS UUID
|
||||
LANGUAGE SQL STABLE STRICT AS $$
|
||||
SELECT m.new_id FROM team_id_mapping m WHERE m.old_id = $1;
|
||||
$$;
|
||||
-- +goose StatementEnd
|
||||
|
||||
ALTER TABLE actions DROP CONSTRAINT fk_actions_team;
|
||||
ALTER TABLE applications DROP CONSTRAINT fk_applications_team;
|
||||
ALTER TABLE team_answers DROP CONSTRAINT fk_team_answers_team;
|
||||
ALTER TABLE game_reviews DROP CONSTRAINT game_reviews_team_id_fkey;
|
||||
|
||||
ALTER TABLE teams ALTER COLUMN id DROP DEFAULT;
|
||||
ALTER TABLE teams ALTER COLUMN id TYPE UUID USING pg_temp.team_uuid(id);
|
||||
ALTER TABLE actions ALTER COLUMN team_id TYPE UUID USING pg_temp.team_uuid(team_id);
|
||||
ALTER TABLE applications ALTER COLUMN team_id TYPE UUID USING pg_temp.team_uuid(team_id);
|
||||
ALTER TABLE team_answers ALTER COLUMN team_id TYPE UUID USING pg_temp.team_uuid(team_id);
|
||||
ALTER TABLE game_reviews ALTER COLUMN team_id TYPE UUID USING pg_temp.team_uuid(team_id);
|
||||
|
||||
ALTER TABLE actions ADD CONSTRAINT fk_actions_team FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE;
|
||||
ALTER TABLE applications ADD CONSTRAINT fk_applications_team FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE;
|
||||
ALTER TABLE team_answers ADD CONSTRAINT fk_team_answers_team FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE;
|
||||
ALTER TABLE game_reviews ADD CONSTRAINT game_reviews_team_id_fkey FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE game_map_items ALTER COLUMN item_id TYPE TEXT USING item_id::text;
|
||||
UPDATE game_map_items m
|
||||
SET item_id = n.new_id::text
|
||||
FROM team_id_mapping n
|
||||
WHERE m.kind = 'team' AND m.item_id = n.old_id::text;
|
||||
|
||||
DROP SEQUENCE teams_id_seq;
|
||||
DROP FUNCTION pg_temp.team_uuid(INTEGER);
|
||||
|
||||
-- Old packages contain numeric team IDs. Keep gameplay and media, discard transfer registries.
|
||||
DELETE FROM game_returns;
|
||||
DELETE FROM game_exports;
|
||||
DELETE FROM game_imports;
|
||||
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
DO $$ BEGIN
|
||||
RAISE EXCEPTION 'Restore the pre-UUID database backup and previous application version to roll back';
|
||||
END $$;
|
||||
-- +goose StatementEnd
|
||||
Reference in New Issue
Block a user