FATAL: database “cz” does not exist
解决方式
未指定数据库实例名。
adb 需要指定 -d 选项 或 在环境变量添加 PGDATABASE=xxx
adb -d shcrm -p xxx -U xxx
原因说明
adb连接时,若不指定数据库名称,则以下述顺序优先选择:
环境变量 $PGDATABASE > adb登录时的用户名
若上述2个配置名称在数据库中均不存在,则抛出高错误。
adb: could not connect to server: Connection refused
解决方式
未指定数据库主机IP。
adb 需要指定 -h 选项 或 在环境变量添加 PGHOST=x.x.x.x
adb -h xxx -d xxx -p xxx -U xxx
原因说明
无
adb: could not connect to server: No such file or directory
解决方式
未指定数据库监听端口。
adb 需要指定 -p 选项 或 在环境变量添加 PGPORT=xxx
adb -p xxx -d xxx -U xxx
原因说明
无
FATAL: role “cz” does not exist
解决方式
未指定数据库连接用户名。
adb 需要指定 -U 选项 或 在环境变量添加 PGUSER=xxx
adb -U xxx -d xxx -p xxx
原因说明
无
adb: could not connect to server: Connection refused
解决方式
为安全起见,默认禁用了远程连接访问功能,只允许localhost连接。那么,如何启用该功能呢?
为了启用网络或者远程访问功能,我们需要在postgresql.conf文件中添加或者编辑下列内容:
listen_addresses = '*'
在adb_hba.conf添加如下内容,以便允许用户通过某种method来访问数据库:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 10.20.21.0/24 trust
postgresql.conf
| 配置项 | 说明 |
|---|---|
| listen_addresses = ‘*’ | listen_addresses指定了要侦听的IP地址。默认只监听localhost的地址,也就是禁止远程服务器来访问。在大多数情况下,我们会接受所有主机的连接,所以可以使用“*”,它表示所有IP地址。如果只接受指定ip的连接,则在adb_hba.conf进行配置。 |
adb_hba.conf
| 配置项 | 说明 |
|---|---|
| TYPE | Type = host表示远程连接。Type = local表示本地Unix domain socket连接。 |
| DATABASE | Database = all 表示所有数据库。其他名字要求严格匹配,还可以规定一个由逗号分隔的数据库列表。 |
| USER | User = all 表示所有用户。其他名字要求严格匹配,还可以规定一个由逗号分隔的用户列表。 |
| CIDR-ADDRESS | CIDR-ADDRESS 由两部分组成,即IP地址/子网掩码。子网掩码规定了IP地址中前面哪些位表示网络编号。这里/0表示IP地址中没有表示网络编号的位,这样的话全部的IP地址都匹配,例如192.168.0.0/24表示匹配前24位,所以它匹配任何192.168.0.x形式的IP地址。 |
| METHOD | Method = trust表示可信认证,允许免密登录。其他的认证方法包括MD5,则要求客户端输入密码验证才能访问数据库 |
其他的一些可能的原因,如下:
- 服务端没起来,ps -ef|grep postgres查看是否存在postgres进程
- 监听问题,cat postgresql.conf|grep listen 查看监听地址是否正确
- 以上都没问题,服务器端能连进去,但客户端不行,这时需要查看adb_hba.conf
- 以上都没问题,检查服务器端的iptables,开启防火墙的访问端口
- 以上都没问题,检查SELINUX,确保SELINUX已关闭
原因说明
按上述说明依次排查
Fatal:connection limit exceeded for non-supersers
解决方式
数据库连接数达到上限,需要调整最大连接数配置。
max_connections是数据库允许的最大连接数,默认值100,
superuser_reserved_connections是预留给超级用户的连接数,默认值3
修改这两个参数都需要重启DB。
与之相关联的参数还有work_mem,连接数*work_mem可以得到DB的内存大小,这个调整视服务器的内存大小
原因说明
按上述说明增大max_connections的配置,并重启数据库服务生效。
FATAL: password authentication failed for user “his”
解决方式
请检查输入的密码是否正确?
此处的密码指该用户his在数据库中对应的密码,非操作系统登录密码。
原因说明
密码不正确,请确认密码的正确性。
FATAL: no adb_hba.conf entry for host “10.21.28.35”, user “adb01”, database “postgres”, SSL off
解决方式
AntDB单机版本:
adb_hba.conf添加一行可信任配置:
host all all 10.21.28.0/24 md5
重新加载配置即可。其中 10.21.28.0 需要访问数据库的客户端IP网段。
adb_ctl -D /data/pgxc_data/cd1/ reload
-D 后面的参数为数据目录。
reload执行成功后,重新尝试登录。
建议在主备环境上都执行下,防止主备切换后应用无法连接现在的备节点。
AntDB集群版本:
登录adbmgr执行下述命令即可:
add hba coordinator all("host all all 10.21.28.0 24 md5");
add hba gtmcoord all("host all all 10.21.28.0 24 md5");
示例中的IP根据实际情况进行修改。
如果执行报错,通过
\h add hba可查看帮助信息。
执行成功后,重新尝试登录。
原因说明
节点的adb_hba.conf未配置该IP信息。
adb_ctl: could not open PID file “/ssd/adb40sy/data/cd/adb_hba.conf/postmaster.pid”: Not a directory
解决方式
通过adb_ctl reload重新加载配置文件时,只需要指定 -D ,即数据库的数据目录,勿需指定到具体的配置文件。
程序会自动重新加载改动后的配置信息。
以下给出一个示例说明:
--错误的方式
adb_ctl -D /ssd/adb40sy/data/cd/adb_hba.conf reload
--正确的方式
adb_ctl -D /ssd/adb40sy/data/cd/ reload
原因说明
adb_ctl reload -D 指定数据目录路径即可,勿需指定到某个具体的配置文件。
cached plan must not change result
解决方式
在jdbc连接串中禁用prepareThreshold功能即可。
以下给出一个示例说明:
jdbc:postgresql://10.78.187.107:5432/postgres?binaryTransfer=False&forceBinary=False&grammar=oracle&prepareThreshold=0
原因说明
执行计划会在服务端被缓存起来,以降低重新生成执行同样计划的开销。
但若在运行过程中更改了表结构,则JDBC就会抛出该异常。
在jdbc连接串中 添加 prepareThreshold=0,禁用jdbc的该功能即可。默认prepareThreshold设置为5.




