-- ============================================================================ -- Echo (回声) - Schema 修复迁移脚本 -- 版本: 202601120002 -- 创建日期: 2026-01-12 -- 修复内容: -- 1. user_stamps 表外键添加 ON DELETE CASCADE -- 2. growth_tags 表添加 UPDATE 策略 -- 3. achievements 表添加 UPDATE 策略 -- 4. daily_stats 表添加 INSERT 策略 -- 5. growth_tags 表添加 behavior_tags GIN 索引 -- ============================================================================ -- ============================================================================ -- 修复 1: user_stamps 表外键添加 ON DELETE CASCADE -- ============================================================================ ALTER TABLE user_stamps DROP CONSTRAINT user_stamps_stamp_def_id_fkey; ALTER TABLE user_stamps ADD CONSTRAINT user_stamps_stamp_def_id_fkey FOREIGN KEY (stamp_def_id) REFERENCES stamp_definitions(id) ON DELETE CASCADE; -- ============================================================================ -- 修复 2: growth_tags 表添加 UPDATE 策略 -- ============================================================================ -- 检查是否已存在 UPDATE 策略 DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_policies WHERE tablename = 'growth_tags' AND policyname = 'System can update growth tags' ) THEN CREATE POLICY "System can update growth tags" ON growth_tags FOR UPDATE USING (auth.role() = 'service_role'); END IF; END $$; -- ============================================================================ -- 修复 3: achievements 表添加 UPDATE 策略 -- ============================================================================ -- 检查是否已存在 UPDATE 策略 DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_policies WHERE tablename = 'achievements' AND policyname = 'System can update achievements' ) THEN CREATE POLICY "System can update achievements" ON achievements FOR UPDATE USING (auth.role() = 'service_role'); END IF; END $$; -- ============================================================================ -- 修复 4: daily_stats 表添加 INSERT 策略 -- ============================================================================ -- 检查是否已存在 INSERT 策略 DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_policies WHERE tablename = 'daily_stats' AND policyname = 'System can insert daily stats' ) THEN CREATE POLICY "System can insert daily stats" ON daily_stats FOR INSERT WITH CHECK (auth.role() = 'service_role'); END IF; END $$; -- ============================================================================ -- 修复 5: growth_tags 表添加 behavior_tags GIN 索引 -- ============================================================================ -- 检查索引是否已存在 DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_indexes WHERE tablename = 'growth_tags' AND indexname = 'idx_growth_tags_behavior' ) THEN CREATE INDEX idx_growth_tags_behavior ON growth_tags USING GIN (behavior_tags); END IF; END $$; -- ============================================================================ -- 修复完成 -- ============================================================================