test_pg_connection.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env python3
  2. """
  3. 测试PostgreSQL数据库连接
  4. """
  5. import os
  6. import psycopg2
  7. from psycopg2.extras import RealDictCursor
  8. from dotenv import load_dotenv
  9. # 加载环境变量
  10. load_dotenv()
  11. def test_connection():
  12. """测试数据库连接"""
  13. try:
  14. # 从环境变量读取配置
  15. conn_params = {
  16. 'host': os.getenv('KNOWHUB_DB'),
  17. 'port': int(os.getenv('KNOWHUB_PORT', 5432)),
  18. 'user': os.getenv('KNOWHUB_USER'),
  19. 'password': os.getenv('KNOWHUB_PASSWORD'),
  20. 'database': os.getenv('KNOWHUB_DB_NAME'),
  21. }
  22. print("正在连接到PostgreSQL...")
  23. print(f"主机: {conn_params['host']}")
  24. print(f"端口: {conn_params['port']}")
  25. print(f"用户: {conn_params['user']}")
  26. print(f"数据库: {conn_params['database']}")
  27. print("-" * 50)
  28. # 建立连接
  29. conn = psycopg2.connect(**conn_params)
  30. cursor = conn.cursor(cursor_factory=RealDictCursor)
  31. # 测试查询
  32. cursor.execute("SELECT version();")
  33. version = cursor.fetchone()
  34. print(f"✅ 连接成功!")
  35. print(f"PostgreSQL版本: {version['version']}")
  36. print("-" * 50)
  37. # 检查pgvector扩展
  38. cursor.execute("""
  39. SELECT * FROM pg_extension WHERE extname = 'vector';
  40. """)
  41. pgvector = cursor.fetchone()
  42. if pgvector:
  43. print(f"✅ pgvector扩展已安装: {pgvector['extversion']}")
  44. else:
  45. print("⚠️ pgvector扩展未安装,需要先安装才能存储向量")
  46. print(" 安装命令: CREATE EXTENSION vector;")
  47. print("-" * 50)
  48. # 列出所有表
  49. cursor.execute("""
  50. SELECT tablename FROM pg_tables
  51. WHERE schemaname = 'public'
  52. ORDER BY tablename;
  53. """)
  54. tables = cursor.fetchall()
  55. if tables:
  56. print(f"数据库中的表 ({len(tables)}个):")
  57. for table in tables:
  58. print(f" - {table['tablename']}")
  59. else:
  60. print("数据库中暂无表")
  61. cursor.close()
  62. conn.close()
  63. print("-" * 50)
  64. print("✅ 测试完成,连接正常!")
  65. return True
  66. except Exception as e:
  67. print(f"❌ 连接失败: {e}")
  68. return False
  69. if __name__ == "__main__":
  70. test_connection()