Files
Neo-ZQYY/scripts/ops/check_fdw_prereqs.py

66 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""检查 FDW 前提条件角色是否存在、app schema 是否有视图/表"""
import psycopg2
CONN = dict(host="100.64.0.4", port=5432, user="local-Python", password="Neo-local-1991125")
print("=== 1. 检查角色 ===")
c = psycopg2.connect(**CONN, dbname="postgres")
cur = c.cursor()
for role in ["app_reader", "app_user"]:
cur.execute("SELECT 1 FROM pg_roles WHERE rolname = %s", (role,))
exists = cur.fetchone() is not None
print(f" {role}: {'OK' if exists else 'MISSING'}")
c.close()
print("\n=== 2. 检查 etl_feiqiu.app schema 对象 ===")
c = psycopg2.connect(**CONN, dbname="etl_feiqiu")
cur = c.cursor()
cur.execute(
"SELECT tablename FROM pg_tables WHERE schemaname = 'app' ORDER BY tablename"
)
tables = [r[0] for r in cur.fetchall()]
cur.execute(
"SELECT viewname FROM pg_views WHERE schemaname = 'app' ORDER BY viewname"
)
views = [r[0] for r in cur.fetchall()]
cur.execute(
"SELECT matviewname FROM pg_matviews WHERE schemaname = 'app' ORDER BY matviewname"
)
mvs = [r[0] for r in cur.fetchall()]
print(f" tables: {len(tables)} {tables[:5]}{'...' if len(tables)>5 else ''}")
print(f" views: {len(views)} {views[:5]}{'...' if len(views)>5 else ''}")
print(f" matviews: {len(mvs)} {mvs[:5]}{'...' if len(mvs)>5 else ''}")
c.close()
print("\n=== 3. 检查 test_etl_feiqiu.app schema 对象 ===")
c = psycopg2.connect(**CONN, dbname="test_etl_feiqiu")
cur = c.cursor()
cur.execute(
"SELECT tablename FROM pg_tables WHERE schemaname = 'app' ORDER BY tablename"
)
tables2 = [r[0] for r in cur.fetchall()]
cur.execute(
"SELECT viewname FROM pg_views WHERE schemaname = 'app' ORDER BY viewname"
)
views2 = [r[0] for r in cur.fetchall()]
cur.execute(
"SELECT matviewname FROM pg_matviews WHERE schemaname = 'app' ORDER BY matviewname"
)
mvs2 = [r[0] for r in cur.fetchall()]
print(f" tables: {len(tables2)} {tables2[:5]}{'...' if len(tables2)>5 else ''}")
print(f" views: {len(views2)} {views2[:5]}{'...' if len(views2)>5 else ''}")
print(f" matviews: {len(mvs2)} {mvs2[:5]}{'...' if len(mvs2)>5 else ''}")
c.close()
print("\n=== 4. 检查 postgres_fdw 扩展可用性 ===")
for db in ["zqyy_app", "test_zqyy_app"]:
c = psycopg2.connect(**CONN, dbname=db)
cur = c.cursor()
cur.execute("SELECT 1 FROM pg_available_extensions WHERE name = 'postgres_fdw'")
avail = cur.fetchone() is not None
cur.execute("SELECT 1 FROM pg_extension WHERE extname = 'postgres_fdw'")
installed = cur.fetchone() is not None
print(f" {db}: available={avail}, installed={installed}")
c.close()