修正
This commit is contained in:
95
run_migration_safe.py
Normal file
95
run_migration_safe.py
Normal file
@@ -0,0 +1,95 @@
|
||||
import psycopg2
|
||||
from psycopg2 import sql
|
||||
|
||||
# 嘗試用 postgres 超級用户
|
||||
try:
|
||||
conn = psycopg2.connect('host=192.168.0.61 port=55432 dbname=postgres user=postgres password=postgres')
|
||||
except:
|
||||
# 如果失敗,嘗試現有用户
|
||||
conn = psycopg2.connect('host=192.168.0.61 port=55432 dbname=njts_acct user=njts_app password=njts_app2025')
|
||||
|
||||
cur = conn.cursor()
|
||||
conn.set_isolation_level(0) # autocommit mode
|
||||
|
||||
print("=" * 80)
|
||||
print("【數據庫遷移:添加修正追踪欄位】")
|
||||
print("=" * 80)
|
||||
|
||||
try:
|
||||
# 1. 檢查並添加欄位
|
||||
print("\n【步驟 1】添加新欄位...")
|
||||
|
||||
# 逐個添加,處理可能已存在的情況
|
||||
try:
|
||||
cur.execute("ALTER TABLE journal_entries ADD COLUMN is_latest BOOLEAN DEFAULT true")
|
||||
print("✓ 欄位 is_latest 已添加")
|
||||
except psycopg2.errors.DuplicateColumn:
|
||||
print("✓ 欄位 is_latest 已存在")
|
||||
|
||||
try:
|
||||
cur.execute("ALTER TABLE journal_entries ADD COLUMN revision_count INTEGER DEFAULT 1")
|
||||
print("✓ 欄位 revision_count 已添加")
|
||||
except psycopg2.errors.DuplicateColumn:
|
||||
print("✓ 欄位 revision_count 已存在")
|
||||
|
||||
try:
|
||||
cur.execute("ALTER TABLE journal_entries ADD COLUMN original_entry_id INTEGER")
|
||||
print("✓ 欄位 original_entry_id 已添加")
|
||||
except psycopg2.errors.DuplicateColumn:
|
||||
print("✓ 欄位 original_entry_id 已存在")
|
||||
|
||||
# 2. 創建索引
|
||||
print("\n【步驟 2】創建索引...")
|
||||
try:
|
||||
cur.execute("CREATE INDEX idx_journal_entries_is_latest ON journal_entries(is_latest, entry_date)")
|
||||
print("✓ 索引 idx_journal_entries_is_latest 已創建")
|
||||
except psycopg2.errors.DuplicateTable:
|
||||
print("✓ 索引已存在")
|
||||
|
||||
try:
|
||||
cur.execute("CREATE INDEX idx_journal_entries_original_entry_id ON journal_entries(original_entry_id)")
|
||||
print("✓ 索引 idx_journal_entries_original_entry_id 已創建")
|
||||
except psycopg2.errors.DuplicateTable:
|
||||
print("✓ 索引已存在")
|
||||
|
||||
# 3. 驗證
|
||||
print("\n【步驟 3】驗證新欄位...")
|
||||
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)
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ 錯誤: {e}")
|
||||
print("\n嘗試替代方案...")
|
||||
|
||||
# 直接連接並嘗試
|
||||
conn2 = psycopg2.connect('host=192.168.0.61 port=55432 dbname=njts_acct user=njts_app password=njts_app2025')
|
||||
cur2 = conn2.cursor()
|
||||
|
||||
# 查看表結構
|
||||
cur2.execute("""
|
||||
SELECT column_name
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'journal_entries'
|
||||
ORDER BY ordinal_position
|
||||
""")
|
||||
|
||||
print("\n【當前 journal_entries 表結構】")
|
||||
for row in cur2.fetchall():
|
||||
print(f" - {row[0]}")
|
||||
|
||||
conn2.close()
|
||||
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user