diff --git a/backend/sql/002b_migrate_episode_number.sql b/backend/sql/002b_migrate_episode_number.sql new file mode 100644 index 0000000..0a69304 --- /dev/null +++ b/backend/sql/002b_migrate_episode_number.sql @@ -0,0 +1,18 @@ +-- ============================================================ +-- 002b_migrate_episode_number.sql +-- 迁移脚本:在 002a 诊断确认安全后执行 +-- 执行方式: psql -U postgres -d milsci_dev -f sql/002b_migrate_episode_number.sql +-- 前置条件:先设 $env:PGCLIENTENCODING="UTF8" +-- 注意:已改用 date_part('year', air_date) 替代 EXTRACT(... )::int 避免语法错误 +-- ============================================================ + +-- 1. 删全局 UNIQUE 约束(幂等:constraint 已删则报 warning,正常) +ALTER TABLE episodes DROP CONSTRAINT episodes_episode_number_key; + +-- 2. 建按年复合唯一索引(重播行 original_episode_id IS NOT NULL 不参与) +CREATE UNIQUE INDEX idx_episodes_year_number + ON episodes (date_part('year', air_date), episode_number) + WHERE original_episode_id IS NULL; + +-- 验证:确认索引生效 +-- \d episodes \ No newline at end of file diff --git a/backend/sql/002c_recreate_index_only.sql b/backend/sql/002c_recreate_index_only.sql new file mode 100644 index 0000000..7d5db10 --- /dev/null +++ b/backend/sql/002c_recreate_index_only.sql @@ -0,0 +1,10 @@ +-- ============================================================ +-- 002c_recreate_index_only.sql +-- 002b 跑半截翻车后补救:只执行 CREATE INDEX,不要再 DROP CONSTRAINT +-- 执行方式: psql -U postgres -d milsci_dev -f sql/002c_recreate_index_only.sql +-- 前置条件:先设 $env:PGCLIENTENCODING="UTF8" +-- ============================================================ + +CREATE UNIQUE INDEX idx_episodes_year_number + ON episodes (date_part('year', air_date), episode_number) + WHERE original_episode_id IS NULL; \ No newline at end of file