-- =============================================================================
-- 从 LLZQ-test 迁移测试数据到新结构
-- 源数据库：LLZQ-test（旧测试库，包含 billiards_ods/billiards_dwd/billiards_dws/etl_admin）
-- 目标数据库：test_etl_feiqiu（新六层 schema）+ test_zqyy_app（业务应用库）
--
-- 前置条件：
--   1. 已执行 db/etl_feiqiu/scripts/create_test_db.sql 创建 test_etl_feiqiu
--   2. 已执行 db/zqyy_app/scripts/create_test_db.sql 创建 test_zqyy_app
--   3. 当前用户对 LLZQ-test 有 SELECT 权限，对目标库有 INSERT 权限
--
-- 执行方式：
--   psql -h <host> -U <user> -f migrate_test_data.sql
--
-- 注意：需要根据实际表映射关系调整，以下为参考模板
-- =============================================================================

-- ---------------------------------------------------------------------------
-- 第一部分：etl_admin → meta（调度/游标/运行记录）
-- ---------------------------------------------------------------------------

-- 迁移运行记录
INSERT INTO test_etl_feiqiu.meta.etl_run_log
    SELECT * FROM dblink(
        'dbname=LLZQ-test',
        'SELECT * FROM etl_admin.etl_run_log'
    ) AS t(
        -- 根据 meta.sql 中 etl_run_log 的实际列定义填充
        -- 示例：run_id bigint, task_code text, started_at timestamptz, ...
    );

-- 迁移游标状态
INSERT INTO test_etl_feiqiu.meta.etl_cursor_state
    SELECT * FROM dblink(
        'dbname=LLZQ-test',
        'SELECT * FROM etl_admin.etl_cursor_state'
    ) AS t(
        -- 根据 meta.sql 中 etl_cursor_state 的实际列定义填充
    );

-- ---------------------------------------------------------------------------
-- 第二部分：billiards_ods → ods（ODS 原始数据）
-- schema 名从 billiards_ods 改为 ods，表结构不变
-- ---------------------------------------------------------------------------

-- 会员档案
INSERT INTO test_etl_feiqiu.ods.member_profiles
    SELECT * FROM dblink(
        'dbname=LLZQ-test',
        'SELECT * FROM billiards_ods.member_profiles'
    ) AS t(
        -- 根据 ods.sql 中 member_profiles 的实际列定义填充
    );

-- 会员余额变动
INSERT INTO test_etl_feiqiu.ods.member_balance_changes
    SELECT * FROM dblink(
        'dbname=LLZQ-test',
        'SELECT * FROM billiards_ods.member_balance_changes'
    ) AS t(
        -- 根据 ods.sql 中 member_balance_changes 的实际列定义填充
    );

-- ... 对 ods schema 中的每张表重复上述模式 ...
-- 完整表清单参见 db/etl_feiqiu/schemas/ods.sql 中的 CREATE TABLE 语句

-- ---------------------------------------------------------------------------
-- 第三部分：billiards_dwd → dwd（DWD 明细数据）
-- schema 名从 billiards_dwd 改为 dwd，保留 main+EX 拆分
-- ---------------------------------------------------------------------------

-- ... 对 dwd schema 中的每张表执行类似迁移 ...
-- 完整表清单参见 db/etl_feiqiu/schemas/dwd.sql 中的 CREATE TABLE 语句

-- ---------------------------------------------------------------------------
-- 第四部分：billiards_dws → dws（DWS 汇总数据）
-- schema 名从 billiards_dws 改为 dws，表结构不变
-- ---------------------------------------------------------------------------

-- ... 对 dws schema 中的每张表执行类似迁移 ...
-- 完整表清单参见 db/etl_feiqiu/schemas/dws.sql 中的 CREATE TABLE 语句

-- ---------------------------------------------------------------------------
-- 第五部分：core schema（新增层，无历史数据可迁移）
-- core 层为新增的统一最小字段集层，需从 dwd 数据重新生成
-- ---------------------------------------------------------------------------

-- 如需填充 core 层测试数据，可从已迁移的 dwd 数据中提取：
-- INSERT INTO test_etl_feiqiu.core.dim_member (member_id, name, mobile, status, site_id)
--     SELECT member_id, name, mobile, status, site_id
--     FROM test_etl_feiqiu.dwd.dim_member_main;

-- ---------------------------------------------------------------------------
-- 第六部分：app schema（视图层，无需迁移数据）
-- app 层仅包含视图和 RLS 策略，数据来自底层 schema
-- ---------------------------------------------------------------------------

-- 无需数据迁移，视图会自动引用底层表数据

-- ---------------------------------------------------------------------------
-- 迁移完成后验证
-- ---------------------------------------------------------------------------

-- 验证各 schema 表行数是否与源库一致
-- SELECT schemaname, relname, n_live_tup
-- FROM pg_stat_user_tables
-- WHERE schemaname IN ('meta', 'ods', 'dwd', 'dws', 'core')
-- ORDER BY schemaname, relname;