简介
今天遇到了一个非常低级的错误,psql无法访问已知的数据库
当我使用psql -h 的时候,会提示报错
[postgres@vm107 ~]$ psql -h 10.0.0.107
Password for user postgres:
psql: error: connection to server at "10.0.0.107", port 5432 failed: FATAL: no such database: postgres
首先postgres数据库是有的

其次白名单也没有问题

数据库监听也没有问题

在查看服务器对外服务地址的时候,就发现了问题

tcp协议的对外服务中没有postgres进程。这样就好理解了,
psql 没有加h的时候是不走TCP协议的。加了h 是需要走TCP 协议的,但是却没有对应的,

虽然在对外服务中你有看到tcp6 协议,那是PG默认开启时就是对所有IPv6 可以访问。但是由于我在白名单中并没有开放IPv6的访问名单,所以即便访问进来,也会被pg_hba.conf拒绝

这里还有一条pgbouncer的信息
tcp 0 0 10.0.0.107:5432 0.0.0.0:* LISTEN 38255/pgbouncer
Local Address 端口信息竟然和我PG的一样,对口相同,PG竟然还能起得来。

psql -h 后面使用的时IPv4 访问PG是走的tcp协议,如果使用的是IPv6,访问PG是走的tcp6协议。
结论
原来pgbouncer只会对外开启TCP服务协议,
postgresql只要有TCP或者TCP6其中一个协议能对外服务,就不影响启动。所以这个和之前同一服务器上同端口的两个PG实例启动会失败不一样。
通过IPv6 访问postgresql数据库。是可以正常访问postgresql数据库的。

最后修改时间:2024-10-11 20:43:45
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




