generated from VLADIMIR/template
66 lines
2.7 KiB
PL/PgSQL
66 lines
2.7 KiB
PL/PgSQL
-- +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
|