修正
This commit is contained in:
100
backend/sql/admin_migration_add_fields.sql
Normal file
100
backend/sql/admin_migration_add_fields.sql
Normal file
@@ -0,0 +1,100 @@
|
||||
-- 【管理员执行】数据库迁移脚本
|
||||
-- 使用 postgres 或其他超级用户执行此脚本
|
||||
|
||||
-- ============================================================================
|
||||
-- 【步骤 1】添加缺失的字段到 journal_entries 表
|
||||
-- ============================================================================
|
||||
|
||||
-- 检查并添加 is_latest 字段
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'journal_entries' AND column_name = 'is_latest'
|
||||
) THEN
|
||||
ALTER TABLE journal_entries ADD COLUMN is_latest BOOLEAN DEFAULT true;
|
||||
RAISE NOTICE '✓ 字段 is_latest 已添加';
|
||||
ELSE
|
||||
RAISE NOTICE '✓ 字段 is_latest 已存在';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 检查并添加 revision_count 字段
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'journal_entries' AND column_name = 'revision_count'
|
||||
) THEN
|
||||
ALTER TABLE journal_entries ADD COLUMN revision_count INTEGER DEFAULT 1;
|
||||
RAISE NOTICE '✓ 字段 revision_count 已添加';
|
||||
ELSE
|
||||
RAISE NOTICE '✓ 字段 revision_count 已存在';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 检查并添加 original_entry_id 字段
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'journal_entries' AND column_name = 'original_entry_id'
|
||||
) THEN
|
||||
ALTER TABLE journal_entries ADD COLUMN original_entry_id INTEGER;
|
||||
RAISE NOTICE '✓ 字段 original_entry_id 已添加';
|
||||
ELSE
|
||||
RAISE NOTICE '✓ 字段 original_entry_id 已存在';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- ============================================================================
|
||||
-- 【步骤 2】添加外键约束(如果字段已添加)
|
||||
-- ============================================================================
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.table_constraints
|
||||
WHERE table_name = 'journal_entries' AND constraint_name = 'fk_original_entry_id'
|
||||
) THEN
|
||||
ALTER TABLE journal_entries
|
||||
ADD CONSTRAINT fk_original_entry_id
|
||||
FOREIGN KEY (original_entry_id)
|
||||
REFERENCES journal_entries(journal_entry_id)
|
||||
ON DELETE CASCADE;
|
||||
RAISE NOTICE '✓ 外键约束已添加';
|
||||
ELSE
|
||||
RAISE NOTICE '✓ 外键约束已存在';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- ============================================================================
|
||||
-- 【步骤 3】创建索引以优化查询
|
||||
-- ============================================================================
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_journal_entries_is_latest
|
||||
ON journal_entries(is_latest, entry_date);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_journal_entries_original_entry_id
|
||||
ON journal_entries(original_entry_id);
|
||||
|
||||
-- ============================================================================
|
||||
-- 【步骤 4】验证迁移结果
|
||||
-- ============================================================================
|
||||
|
||||
SELECT 'Migration Verification:' as status;
|
||||
|
||||
SELECT column_name, data_type, is_nullable
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'journal_entries'
|
||||
AND column_name IN ('is_latest', 'revision_count', 'original_entry_id')
|
||||
ORDER BY ordinal_position;
|
||||
|
||||
SELECT 'Indexes:' as status;
|
||||
|
||||
SELECT indexname
|
||||
FROM pg_indexes
|
||||
WHERE tablename = 'journal_entries'
|
||||
AND (indexname LIKE 'idx_journal_entries_is_latest' OR indexname LIKE 'idx_journal_entries_original_entry_id');
|
||||
|
||||
SELECT '✓ 迁移完成!' as complete;
|
||||
Reference in New Issue
Block a user