2026-01-25 22:34:33 +08:00
|
|
|
|
"""数据库连通性检查脚本。
|
|
|
|
|
|
|
|
|
|
|
|
用途:
|
|
|
|
|
|
- 快速验证 PostgreSQL 是否可连接
|
|
|
|
|
|
- 尝试加载 TimescaleDB 扩展,并输出版本信息(若可用)
|
|
|
|
|
|
|
|
|
|
|
|
注意:脚本只做连通性验证,不会打印密码。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2026-01-19 14:27:41 +08:00
|
|
|
|
import os
|
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
|
|
def check_database():
|
2026-01-25 22:34:33 +08:00
|
|
|
|
"""检查数据库连接与 TimescaleDB 扩展可用性。"""
|
2026-01-19 14:27:41 +08:00
|
|
|
|
print("正在检查数据库连接...")
|
|
|
|
|
|
|
|
|
|
|
|
# 连接参数:通过环境变量覆盖(不在输出中打印密码)
|
|
|
|
|
|
user = os.getenv("PG_USER", "smartedt")
|
|
|
|
|
|
password = os.getenv("PG_PASSWORD", "postgres")
|
|
|
|
|
|
host = os.getenv("PG_HOST", "127.0.0.1")
|
|
|
|
|
|
port = os.getenv("PG_PORT", "5432")
|
|
|
|
|
|
dbname = "smartedt"
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
import psycopg
|
|
|
|
|
|
conn = psycopg.connect(
|
|
|
|
|
|
dbname=dbname,
|
|
|
|
|
|
user=user,
|
|
|
|
|
|
password=password,
|
|
|
|
|
|
host=host,
|
|
|
|
|
|
port=port,
|
|
|
|
|
|
autocommit=True,
|
|
|
|
|
|
)
|
|
|
|
|
|
server_version = getattr(conn.info, "server_version", None)
|
|
|
|
|
|
print(f"✅ 成功连接到 PostgreSQL 数据库 '{dbname}' (用户: {user}, v{server_version})")
|
|
|
|
|
|
|
|
|
|
|
|
cur = conn.cursor()
|
|
|
|
|
|
|
|
|
|
|
|
# 检查 TimescaleDB 扩展是否已安装
|
|
|
|
|
|
print("正在检查 TimescaleDB 扩展...")
|
|
|
|
|
|
try:
|
|
|
|
|
|
# 尝试创建扩展(如果不存在)
|
|
|
|
|
|
cur.execute("CREATE EXTENSION IF NOT EXISTS timescaledb;")
|
|
|
|
|
|
print("✅ TimescaleDB 扩展加载成功")
|
|
|
|
|
|
|
|
|
|
|
|
# 检查版本
|
|
|
|
|
|
cur.execute("SELECT extversion FROM pg_extension WHERE extname = 'timescaledb';")
|
|
|
|
|
|
version = cur.fetchone()
|
|
|
|
|
|
if version:
|
|
|
|
|
|
print(f"✅ TimescaleDB 版本: {version[0]}")
|
|
|
|
|
|
else:
|
|
|
|
|
|
print("❌ 未找到 TimescaleDB 版本信息")
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
print(f"❌ TimescaleDB 检查失败: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
cur.close()
|
|
|
|
|
|
conn.close()
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
print(f"❌ 连接失败: {e}")
|
|
|
|
|
|
print("\n可能有以下原因:")
|
|
|
|
|
|
print("1. 数据库服务未启动 (请运行 'net start postgresql-x64-17')")
|
|
|
|
|
|
print("2. 密码错误 (请设置环境变量 PG_PASSWORD)")
|
|
|
|
|
|
print("3. 端口被占用或配置不同")
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2026-01-25 22:34:33 +08:00
|
|
|
|
"""作为脚本运行时的入口。"""
|
2026-01-19 14:27:41 +08:00
|
|
|
|
try:
|
|
|
|
|
|
import psycopg # noqa: F401
|
|
|
|
|
|
except ImportError:
|
|
|
|
|
|
print("缺少依赖 psycopg,请先安装后再运行该脚本。")
|
|
|
|
|
|
raise
|
|
|
|
|
|
|
|
|
|
|
|
check_database()
|