当连接云上的PG数据库,即通过外网连接PG数据库,经常发现在改完数据后,保存时弹出连接已经断开错误。其实这是由于电信服务商偷懒造成的,一般电信服务商在一个TCP连接没有任何往来数据长达1分钟以上,会自动切断此连接。解决办法也很简单,让PG数据库对连接启用TCP协议的心跳机制,打破沉默,避免被电信服务商误杀。
由于时间久远,忘了怎么安装的,先检查一下数据库的安装信息:
systemctl status postgres*
返回的结果包含了版本信息,和数据目录:
● postgresql-9.6.service - PostgreSQL 9.6 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.6.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2021-01-15 17:12:16 CST; 1min 34s ago
Docs: https://www.postgresql.org/docs/9.6/static/
Process: 55858 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Process: 55923 ExecStartPre=/usr/pgsql-9.6/bin/postgresql96-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 55928 (postmaster)
CGroup: /system.slice/postgresql-9.6.service
├─55928 /usr/pgsql-9.6/bin/postmaster -D /pgdata/
则数据目录是在/pgdata/,进入,并修改配置文件
cd /pgdata/ && vim postgresql.conf
将以下三处的前面#去掉,并且把默认值0换成如下
tcp_keepalives_idle = 20
#20秒主动发心跳
tcp_keepalives_interval = 10
#10秒未收到返回心跳则本心跳失败
tcp_keepalives_count = 3
#连续3次心跳失败则主动断线
然后重启PG数据库即可
systemctl restart postgresql-9.6