1.Base基础/3.Icon图标/操作/search备份
1.Base基础/3.Icon图标/操作/search备份
EN
文档
AntDB简介
快速入门
用户手册
数据安全
系统架构
最佳实践
  • 文档首页 /
  • 参考指南 /
  • 常见问题FAQ /
  • 数据库连接

数据库连接

更新时间:2024-04-17 16:23:23

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

配置项说明
TYPEType = host表示远程连接。Type = local表示本地Unix domain socket连接。
DATABASEDatabase = all 表示所有数据库。其他名字要求严格匹配,还可以规定一个由逗号分隔的数据库列表。
USERUser = all 表示所有用户。其他名字要求严格匹配,还可以规定一个由逗号分隔的用户列表。
CIDR-ADDRESSCIDR-ADDRESS 由两部分组成,即IP地址/子网掩码。子网掩码规定了IP地址中前面哪些位表示网络编号。这里/0表示IP地址中没有表示网络编号的位,这样的话全部的IP地址都匹配,例如192.168.0.0/24表示匹配前24位,所以它匹配任何192.168.0.x形式的IP地址。
METHODMethod = 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.


问题反馈