修正
This commit is contained in:
72
run_migration.py
Normal file
72
run_migration.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import psycopg2
|
||||
|
||||
conn = psycopg2.connect('host=192.168.0.61 port=55432 dbname=njts_acct user=njts_app password=njts_app2025')
|
||||
cur = conn.cursor()
|
||||
|
||||
print("=" * 80)
|
||||
print("【數據庫遷移:添加修正追踪欄位】")
|
||||
print("=" * 80)
|
||||
|
||||
# 1. 添加新欄位
|
||||
print("\n【步驟 1】添加新欄位...")
|
||||
cur.execute("""
|
||||
ALTER TABLE journal_entries
|
||||
ADD COLUMN IF NOT EXISTS is_latest BOOLEAN DEFAULT true,
|
||||
ADD COLUMN IF NOT EXISTS revision_count INTEGER DEFAULT 1,
|
||||
ADD COLUMN IF NOT EXISTS original_entry_id INTEGER REFERENCES journal_entries(journal_entry_id) ON DELETE CASCADE
|
||||
""")
|
||||
print("✓ 新欄位已添加")
|
||||
|
||||
# 2. 更新現有數據
|
||||
print("\n【步驟 2】更新現有數據...")
|
||||
cur.execute("""
|
||||
UPDATE journal_entries
|
||||
SET is_latest = false
|
||||
WHERE is_deleted = true AND is_latest IS NOT NULL
|
||||
""")
|
||||
deleted_count = cur.rowcount
|
||||
print(f"✓ 標記 {deleted_count} 條已刪除的交易為 is_latest=false")
|
||||
|
||||
cur.execute("""
|
||||
UPDATE journal_entries
|
||||
SET is_latest = true
|
||||
WHERE is_deleted = false AND is_latest IS NULL
|
||||
""")
|
||||
active_count = cur.rowcount
|
||||
print(f"✓ 標記 {active_count} 條活躍的交易為 is_latest=true")
|
||||
|
||||
# 3. 創建索引
|
||||
print("\n【步驟 3】創建索引...")
|
||||
cur.execute("""
|
||||
CREATE INDEX IF NOT EXISTS idx_journal_entries_is_latest
|
||||
ON journal_entries(is_latest, entry_date)
|
||||
""")
|
||||
print("✓ 索引 idx_journal_entries_is_latest 已創建")
|
||||
|
||||
cur.execute("""
|
||||
CREATE INDEX IF NOT EXISTS idx_journal_entries_original_entry_id
|
||||
ON journal_entries(original_entry_id)
|
||||
""")
|
||||
print("✓ 索引 idx_journal_entries_original_entry_id 已創建")
|
||||
|
||||
conn.commit()
|
||||
|
||||
# 驗證
|
||||
print("\n【步驟 4】驗證新欄位...")
|
||||
cur.execute("""
|
||||
SELECT column_name, data_type
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'journal_entries'
|
||||
AND column_name IN ('is_latest', 'revision_count', 'original_entry_id')
|
||||
ORDER BY ordinal_position
|
||||
""")
|
||||
|
||||
rows = cur.fetchall()
|
||||
for col_name, data_type in rows:
|
||||
print(f" ✓ {col_name}: {data_type}")
|
||||
|
||||
print("\n" + "=" * 80)
|
||||
print("✓ 數據庫遷移完成!")
|
||||
print("=" * 80)
|
||||
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user