-- gifuroge.event_table から rogdb.rog_newevent2 への移行SQL -- -- 移行条件: -- - event_day < '2024-10-01' のデータを移行 -- - self_rogaining = False として移行 -- - その他 = True として移行(コメントで記録) -- -- 実行前の準備: -- 1. gifurogeデータベースからrogdbデータベースへのdblink接続が必要 -- 2. または、両方のデータベースに同時アクセス可能な環境での実行 -- Step 1: 移行対象データの確認 -- gifurogeデータベースで実行 SELECT event_code, event_name, start_time, event_day, -- 日時計算の確認 CASE WHEN start_time IS NULL OR start_time = '' THEN (event_day || ' 09:00:00')::timestamp ELSE (event_day || ' ' || start_time || ':00')::timestamp END as start_datetime, CASE WHEN start_time IS NULL OR start_time = '' THEN (event_day || ' 09:00:00')::timestamp + INTERVAL '5 hours' ELSE (event_day || ' ' || start_time || ':00')::timestamp + INTERVAL '5 hours' END as end_datetime, CASE WHEN start_time IS NULL OR start_time = '' THEN (event_day || ' 09:00:00')::timestamp - INTERVAL '3 days' ELSE (event_day || ' ' || start_time || ':00')::timestamp - INTERVAL '3 days' END as deadline_datetime FROM event_table WHERE event_day < '2024-10-01' AND event_code IS NOT NULL AND event_code != '' ORDER BY event_day; -- Step 2: 実際の移行(rogdbデータベースで実行) -- 注意: 以下のSQLはrogdbデータベースで実行する必要があります -- gifurogeデータベースからのデータ取得にはdblinkまたは別の方法が必要です -- dblinkを使用する場合の例: -- SELECT dblink_connect('gifuroge_conn', 'host=postgres-db dbname=gifuroge user=admin password=admin123456'); -- 移行用のINSERT文(手動で値を入力する場合の例) /* INSERT INTO rog_newevent2 ( event_name, -- gifuroge.event_table.event_code event_description, -- gifuroge.event_table.event_name start_datetime, -- gifuroge.event_table.event_day + start_time end_datetime, -- start_datetime + 5 hours "deadlineDateTime", -- start_datetime - 3 days self_rogaining, -- False status, -- 'public' public, -- True hour_5, -- True hour_3, -- False class_general, -- True class_family, -- True class_solo_male, -- True class_solo_female, -- True event_code, -- gifuroge.event_table.event_code (MobServer統合) start_time, -- gifuroge.event_table.start_time (MobServer統合) event_day -- gifuroge.event_table.event_day (MobServer統合) ) SELECT et.event_code as event_name, et.event_name as event_description, CASE WHEN et.start_time IS NULL OR et.start_time = '' THEN (et.event_day || ' 09:00:00')::timestamp AT TIME ZONE 'Asia/Tokyo' ELSE (et.event_day || ' ' || et.start_time || ':00')::timestamp AT TIME ZONE 'Asia/Tokyo' END as start_datetime, CASE WHEN et.start_time IS NULL OR et.start_time = '' THEN (et.event_day || ' 09:00:00')::timestamp AT TIME ZONE 'Asia/Tokyo' + INTERVAL '5 hours' ELSE (et.event_day || ' ' || et.start_time || ':00')::timestamp AT TIME ZONE 'Asia/Tokyo' + INTERVAL '5 hours' END as end_datetime, CASE WHEN et.start_time IS NULL OR et.start_time = '' THEN (et.event_day || ' 09:00:00')::timestamp AT TIME ZONE 'Asia/Tokyo' - INTERVAL '3 days' ELSE (et.event_day || ' ' || et.start_time || ':00')::timestamp AT TIME ZONE 'Asia/Tokyo' - INTERVAL '3 days' END as deadline_datetime, false as self_rogaining, -- 指定条件 'public' as status, -- デフォルトステータス true as public, -- 公開設定 true as hour_5, -- 5時間イベント false as hour_3, -- 3時間イベントではない true as class_general, -- 一般クラス有効 true as class_family, -- ファミリークラス有効 true as class_solo_male, -- 男子ソロクラス有効 true as class_solo_female, -- 女子ソロクラス有効 et.event_code, -- MobServer統合フィールド et.start_time, -- MobServer統合フィールド et.event_day -- MobServer統合フィールド FROM dblink('gifuroge_conn', 'SELECT event_code, event_name, start_time, event_day FROM event_table WHERE event_day < ''2024-10-01'' AND event_code IS NOT NULL AND event_code != '''' ORDER BY event_day' ) AS et(event_code text, event_name text, start_time text, event_day text) WHERE NOT EXISTS ( SELECT 1 FROM rog_newevent2 WHERE event_name = et.event_code ); */ -- dblinkの切断 -- SELECT dblink_disconnect('gifuroge_conn'); -- Step 3: 移行結果の確認 SELECT id, event_name, event_description, start_datetime, end_datetime, "deadlineDateTime", self_rogaining, status, event_code, start_time, event_day FROM rog_newevent2 WHERE self_rogaining = false AND event_code IS NOT NULL ORDER BY start_datetime; -- 移行件数の確認 SELECT COUNT(*) as total_migrated_events FROM rog_newevent2 WHERE self_rogaining = false AND event_code IS NOT NULL; -- 注意事項: -- 1. 上記のSQLは例であり、実際の実行環境に応じて調整が必要です -- 2. dblinkを使用しない場合は、ETLツールやアプリケーションレベルでの移行を推奨します -- 3. "その他=True"に相当するフィールドが見つからない場合、新しいフィールドの追加を検討してください -- 4. 実行前に必ずバックアップを取ってください