veza/veza-backend-api/migrations/070_finish_secondary_tables_uuid.sql

53 lines
2.8 KiB
SQL

-- Migration: Finaliser la transition UUID pour les tables secondaires
-- Date: 2024-12-04
-- Description: Finalise le travail de migrations/001_migrate_ids_to_uuid_up.sql
-- Pour chaque table ayant une colonne 'new_id' (UUID) et une ancienne 'id' (INT/BIGINT),
-- on supprime l'ancienne et on promeut la nouvelle en Primary Key.
-- Liste des tables concernées:
-- hls_transcode_queue, bitrate_adaptation_logs, contests, contest_entries, contest_judges,
-- contest_votes, contest_sponsors, contest_stems, contest_analytics, contest_badges,
-- federated_identities, equipment, hardware_sales, equipment_trades, hardware_offers,
-- mfa_configs, playback_analytics, recovery_codes, refresh_tokens, roles, permissions,
-- user_roles, royalty_records, royalty_payouts, royalty_rates, creator_royalty_rates,
-- royalty_config, sellable_contents, jury_members, track_history, track_versions,
-- user_settings, user_profiles
DO $$
DECLARE
tables text[] := ARRAY[
'hls_transcode_queue', 'bitrate_adaptation_logs', 'contests', 'contest_entries',
'contest_judges', 'contest_votes', 'contest_sponsors', 'contest_stems',
'contest_analytics', 'contest_badges', 'federated_identities', 'equipment',
'hardware_sales', 'equipment_trades', 'hardware_offers', 'mfa_configs',
'playback_analytics', 'recovery_codes', 'refresh_tokens', 'roles', 'permissions',
'user_roles', 'royalty_records', 'royalty_payouts', 'royalty_rates',
'creator_royalty_rates', 'royalty_config', 'sellable_contents', 'jury_members',
'track_history', 'track_versions', 'user_settings', 'user_profiles'
];
t text;
BEGIN
FOREACH t IN ARRAY tables LOOP
-- Vérifier si la table existe et a la colonne new_id
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = t AND column_name = 'new_id') THEN
-- 1. Supprimer l'ancienne contrainte de clé primaire (si elle existe)
-- On cherche le nom de la contrainte PK
EXECUTE 'ALTER TABLE ' || quote_ident(t) || ' DROP CONSTRAINT IF EXISTS ' || quote_ident(t || '_pkey') || ' CASCADE';
-- 2. Supprimer l'ancienne colonne ID
EXECUTE 'ALTER TABLE ' || quote_ident(t) || ' DROP COLUMN IF EXISTS id CASCADE';
-- 3. Renommer new_id en id
EXECUTE 'ALTER TABLE ' || quote_ident(t) || ' RENAME COLUMN new_id TO id';
-- 4. Mettre id en NOT NULL (devrait déjà l'être via default, mais sécurité)
EXECUTE 'ALTER TABLE ' || quote_ident(t) || ' ALTER COLUMN id SET NOT NULL';
-- 5. Ajouter la nouvelle clé primaire
EXECUTE 'ALTER TABLE ' || quote_ident(t) || ' ADD PRIMARY KEY (id)';
RAISE NOTICE 'Table % migrée avec succès vers UUID', t;
END IF;
END LOOP;
END $$;