65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
修复 test_zqyy_app 的 FDW:
|
||
1. 为 local-Python 添加 user mapping(IMPORT 需要当前用户有映射)
|
||
2. 重新 IMPORT FOREIGN SCHEMA
|
||
"""
|
||
import psycopg2
|
||
|
||
CONN = dict(host="100.64.0.4", port=5432, user="local-Python", password="Neo-local-1991125")
|
||
|
||
conn = psycopg2.connect(**CONN, dbname="test_zqyy_app")
|
||
conn.autocommit = True
|
||
cur = conn.cursor()
|
||
|
||
steps = [
|
||
# 为执行用户添加 user mapping(用超级用户身份连远程库)
|
||
(
|
||
"CREATE USER MAPPING IF NOT EXISTS FOR \"local-Python\" "
|
||
"SERVER test_etl_feiqiu_server "
|
||
"OPTIONS (user 'local-Python', password 'Neo-local-1991125')",
|
||
"添加 local-Python user mapping"
|
||
),
|
||
# 导入外部表
|
||
(
|
||
"IMPORT FOREIGN SCHEMA app FROM SERVER test_etl_feiqiu_server INTO fdw_etl",
|
||
"导入 test_etl_feiqiu.app 外部表"
|
||
),
|
||
]
|
||
|
||
for sql, label in steps:
|
||
try:
|
||
cur.execute(sql)
|
||
print(f"[OK] {label}")
|
||
except Exception as e:
|
||
conn.rollback()
|
||
msg = str(e).strip().split("\n")[0]
|
||
print(f"[FAIL] {label}: {msg}")
|
||
|
||
# 验证
|
||
cur.execute(
|
||
"SELECT count(*) FROM information_schema.tables "
|
||
"WHERE table_schema = 'fdw_etl'"
|
||
)
|
||
count = cur.fetchone()[0]
|
||
print(f"\n验证: fdw_etl 外部表数 = {count}")
|
||
|
||
# 同时给 zqyy_app 也加上 local-Python mapping(方便调试)
|
||
conn.close()
|
||
conn = psycopg2.connect(**CONN, dbname="zqyy_app")
|
||
conn.autocommit = True
|
||
cur = conn.cursor()
|
||
try:
|
||
cur.execute(
|
||
"CREATE USER MAPPING IF NOT EXISTS FOR \"local-Python\" "
|
||
"SERVER etl_feiqiu_server "
|
||
"OPTIONS (user 'local-Python', password 'Neo-local-1991125')"
|
||
)
|
||
print("[OK] zqyy_app: 添加 local-Python user mapping")
|
||
except Exception as e:
|
||
msg = str(e).strip().split("\n")[0]
|
||
print(f"[SKIP] zqyy_app: {msg}")
|
||
|
||
conn.close()
|
||
print("\n完成!")
|