Fix migration error

This commit is contained in:
2025-08-29 09:11:20 +09:00
parent a180c1e258
commit b91b522fa3
26 changed files with 5848 additions and 22 deletions

158
analyze_old_rogdb.py Normal file
View File

@ -0,0 +1,158 @@
#!/usr/bin/env python
"""
old_rogdb構造分析データ移行準備スクリプト
old_rogdbの構造を詳細に分析し、rogdbへの移行計画を立てる
"""
import os
import sys
import django
import psycopg2
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()
from django.conf import settings
print("=== old_rogdb構造分析 ===")
# old_rogdb直接接続設定
old_db_config = {
'host': 'postgres-db',
'database': 'old_rogdb',
'user': 'admin',
'password': 'admin123456',
'port': 5432
}
try:
# old_rogdbに直接接続
old_conn = psycopg2.connect(**old_db_config)
old_cursor = old_conn.cursor()
print("✅ old_rogdb接続成功")
print("\\n=== 1. old_rogdb rog_entry構造分析 ===")
old_cursor.execute("""
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'rog_entry' AND table_schema = 'public'
ORDER BY ordinal_position;
""")
old_entry_columns = old_cursor.fetchall()
print("old_rogdb.rog_entry 構造:")
for col_name, data_type, nullable, default in old_entry_columns:
print(f" - {col_name}: {data_type} {'(NULL可)' if nullable == 'YES' else '(NOT NULL)'} {f'[default: {default}]' if default else ''}")
# old_rogdb rog_entry データ確認
old_cursor.execute("SELECT COUNT(*) FROM rog_entry;")
old_entry_count = old_cursor.fetchone()[0]
print(f"\\nold_rogdb.rog_entry データ件数: {old_entry_count}")
# サンプルデータ確認
old_cursor.execute("SELECT * FROM rog_entry LIMIT 3;")
old_entry_samples = old_cursor.fetchall()
print("\\nサンプルデータ最初の3件:")
for i, row in enumerate(old_entry_samples):
print(f" Row {i+1}: {row}")
print("\\n=== 2. old_rogdb rog_team構造分析 ===")
old_cursor.execute("""
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'rog_team' AND table_schema = 'public'
ORDER BY ordinal_position;
""")
old_team_columns = old_cursor.fetchall()
print("old_rogdb.rog_team 構造:")
for col_name, data_type, nullable, default in old_team_columns:
print(f" - {col_name}: {data_type} {'(NULL可)' if nullable == 'YES' else '(NOT NULL)'} {f'[default: {default}]' if default else ''}")
old_cursor.execute("SELECT COUNT(*) FROM rog_team;")
old_team_count = old_cursor.fetchone()[0]
print(f"\\nold_rogdb.rog_team データ件数: {old_team_count}")
print("\\n=== 3. old_rogdb rog_member構造分析 ===")
try:
old_cursor.execute("""
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'rog_member' AND table_schema = 'public'
ORDER BY ordinal_position;
""")
old_member_columns = old_cursor.fetchall()
if old_member_columns:
print("old_rogdb.rog_member 構造:")
for col_name, data_type, nullable, default in old_member_columns:
print(f" - {col_name}: {data_type} {'(NULL可)' if nullable == 'YES' else '(NOT NULL)'} {f'[default: {default}]' if default else ''}")
old_cursor.execute("SELECT COUNT(*) FROM rog_member;")
old_member_count = old_cursor.fetchone()[0]
print(f"\\nold_rogdb.rog_member データ件数: {old_member_count}")
else:
print("old_rogdb.rog_member テーブルが存在しません")
except Exception as e:
print(f"old_rogdb.rog_member 確認エラー: {e}")
print("\\n=== 4. FC岐阜関連データ詳細分析 ===")
# FC岐阜イベント確認
old_cursor.execute("""
SELECT id, event_name, start_datetime, end_datetime
FROM rog_newevent2
WHERE event_name LIKE '%FC岐阜%' OR event_name LIKE '%fc岐阜%'
ORDER BY id;
""")
fc_events = old_cursor.fetchall()
print("FC岐阜関連イベント:")
for event_id, name, start, end in fc_events:
print(f" Event {event_id}: '{name}' ({start} - {end})")
# このイベントのエントリー数確認
old_cursor.execute("SELECT COUNT(*) FROM rog_entry WHERE event_id = %s;", (event_id,))
entry_count = old_cursor.fetchone()[0]
print(f" エントリー数: {entry_count}")
# FC岐阜イベントのエントリー詳細
if fc_events:
fc_event_id = fc_events[0][0] # 最初のFC岐阜イベント
print(f"\\nFC岐阜イベント(ID:{fc_event_id})のエントリー詳細:")
old_cursor.execute("""
SELECT re.id, re.team_id, re.category_id, re.zekken_number, re.zekken_label,
rt.team_name, rc.category_name
FROM rog_entry re
JOIN rog_team rt ON re.team_id = rt.id
LEFT JOIN rog_newcategory rc ON re.category_id = rc.id
WHERE re.event_id = %s
ORDER BY re.zekken_number
LIMIT 10;
""", (fc_event_id,))
fc_entry_details = old_cursor.fetchall()
for entry_id, team_id, cat_id, zekken, label, team_name, cat_name in fc_entry_details:
print(f" Entry {entry_id}: Team {team_id}({team_name}) - ゼッケン{zekken} - {cat_name}")
print("\\n=== 5. 移行計画 ===")
print("移行が必要なテーブル:")
print(" 1. old_rogdb.rog_team → rogdb.rog_team")
print(" 2. old_rogdb.rog_entry → rogdb.rog_entry")
print(" 3. old_rogdb.rog_member → rogdb.rog_member (存在する場合)")
print("\\n注意点:")
print(" - イベントはrog_newevent2を使用")
print(" - 外部キー制約の整合性確保")
print(" - データ型の変換(必要に応じて)")
print(" - 重複データの回避")
old_cursor.close()
old_conn.close()
except Exception as e:
print(f"❌ エラーが発生しました: {e}")
import traceback
traceback.print_exc()