PostgreSQL

报错内容

psql连接报错数据库连接已满,无法建立新的连接。

  1. [53300] FATAL: sorry, too many clients already.

解决办法

查看当前的连接数

  1. postgres=# select count(1) from pg_stat_activity;
  2. count
  3. -------
  4. 76
  5. (1 row)
  6. postgres=# show max_connections;
  7. max_connections
  8. -----------------
  9. 100
  10. (1 row)

image.png

1、关闭空闲连接

查看目前所有的连接的进程id、应用名称、状态。

  1. select datname,pid,application_name,state from pg_stat_activity;

通过pid终止空闲连接(该语句只能关闭一个连接终端的pid)

  1. select pg_terminate_backend(pid) from pg_stat_activity;

image.png
通过下面的SQL查询所有处于等待状态的进程

  1. select concat('select pg_terminate_backend(', pid, ') from pg_stat_activity;') from pg_stat_activity where state = 'idle';

image.png
然后批量执行生成的脚本SQL即可关闭所有的空闲连接。然后查看当前连接数

  1. select count(1) from pg_stat_activity;

image.png
此时已经减少了很多空闲连接。尝试客户端访问数据库可以连接成功
image.png

2、调整数据库最大连接数,并重启生效