"""一次性脚本:执行 2026-02-24 迁移(cleanup_assistant_abolish + add_goods_stock_warning_info)""" import os import sys from pathlib import Path from dotenv import load_dotenv # 加载根 .env root = Path(__file__).resolve().parent.parent.parent load_dotenv(root / ".env") dsn = os.environ.get("TEST_DB_DSN") if not dsn: print("ERROR: TEST_DB_DSN 未设置", file=sys.stderr) sys.exit(1) import psycopg2 migrations = [ root / "db/etl_feiqiu/migrations/2026-02-24__cleanup_assistant_abolish_residual.sql", root / "db/etl_feiqiu/migrations/2026-02-24__add_goods_stock_warning_info.sql", ] conn = psycopg2.connect(dsn) try: for mig in migrations: print(f"\n--- 执行: {mig.name} ---") sql = mig.read_text(encoding="utf-8") # 去掉验证 SQL 注释部分(-- === 之后) parts = sql.split("-- =====") exec_sql = parts[0] with conn.cursor() as cur: cur.execute(exec_sql) conn.commit() print(f" 完成") # 验证 Task 1 with conn.cursor() as cur: cur.execute("SELECT * FROM meta.etl_task WHERE task_code IN ('ODS_ASSISTANT_ABOLISH', 'ASSISTANT_ABOLISH')") print(f"\nTask 1 验证 - ASSISTANT_ABOLISH 残留记录数: {cur.rowcount}") # 验证 Task 4 with conn.cursor() as cur: cur.execute(""" SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'ods' AND table_name = 'store_goods_master' AND column_name IN ('warning_sales_day', 'warning_day_max', 'warning_day_min') ORDER BY column_name """) rows = cur.fetchall() print(f"Task 4 验证 - ODS 新列: {rows}") with conn.cursor() as cur: cur.execute(""" SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'dwd' AND table_name = 'dim_store_goods_ex' AND column_name IN ('warning_sales_day', 'warning_day_max', 'warning_day_min') ORDER BY column_name """) rows = cur.fetchall() print(f"Task 4 验证 - DWD 新列: {rows}") finally: conn.close() print("\n全部迁移执行完毕")