You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hasura连接PostgreSQL数据库失败,求正确URL及解决办法

Hasura连接PostgreSQL失败的排查与解决方法

问题背景

你正在构建GraphQL API,尝试用Hasura连接已运行的PostgreSQL数据库,连接信息如下:

  • Hostname: localhost
  • Port: 5432
  • Username: postgres
  • Password: postgres
  • Database: SuperMart_DB

尝试过的Hasura数据库URL:

postgresql://postgres:postgres@127.0.0.1:5432/SuperMart_DB
postgresql+psycopg2://postgres:postgres@localhost:5432/SuperMart_DB

均返回错误:

Inconsistent object: connection error

但使用Python的psycopg2可以正常连接:

conn = psycopg2.connect(host="127.0.0.1", port = 5432, database="SuperMart_DB", user="postgres", password="postgres")

排查与解决步骤

1. 修正数据库URL格式

Hasura不需要在URL中指定+psycopg2后缀,它使用内置的连接驱动。直接使用标准格式:

postgresql://postgres:postgres@<host>:5432/SuperMart_DB

2. 解决网络访问问题(重点排查Docker场景)

如果Hasura是通过Docker运行的,localhost/127.0.0.1指向的是容器内部,而非宿主机的PostgreSQL:

  • 替换URL中的localhost为宿主机的局域网IP(如192.168.1.100)
  • 若使用Docker Compose,且PostgreSQL也在Compose服务中,直接用PostgreSQL的服务名作为host(例如postgres)
  • 或者给Hasura容器添加--network=host参数,让容器共享宿主机网络

3. 验证PostgreSQL的监听配置

编辑PostgreSQL的postgresql.conf文件,确认:

listen_addresses = '*'

这会允许PostgreSQL监听所有IP,而非仅本地回环地址。修改后重启PostgreSQL服务。

4. 调整PostgreSQL的访问权限

编辑pg_hba.conf文件,添加允许Hasura所在IP访问的规则:

# 允许特定IP访问(替换为Hasura的实际IP)
host    all             all             192.168.1.101/32            scram-sha-256

# 若为Docker容器,允许整个局域网访问
host    all             all             192.168.0.0/16           scram-sha-256

修改后重启PostgreSQL服务。

5. 直接测试容器内连接(Docker场景)

进入Hasura容器,用psql测试连接,确认网络可达:

docker exec -it <hasura-container-id> bash
psql postgresql://postgres:postgres@<host-ip>:5432/SuperMart_DB

如果连接失败,说明是网络或权限问题;如果成功,检查Hasura控制台的配置是否有误。

6. 检查版本兼容性

若使用较旧的Hasura版本,可能不支持PostgreSQL的scram-sha-256认证。可临时修改pg_hba.conf改用md5测试:

host    all             all             <hasura-ip>/32            md5

内容的提问来源于stack exchange,提问作者Tobitor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:35:23