如何解决致命错误:非超级用户超出连接限制

时间:2012-11-27 10:14:26

标签: java postgresql

我已经编写了一个用于批量插入的java代码。我正在使用copy命令为不同的表导入和创建不同的连接对象,但在执行时,程序会抛出以下错误:

FATAL: connection limit exceeded for non-superusers

2 个答案:

答案 0 :(得分:12)

您已超出PostgreSQL服务器的连接限制。超级用户有一些保留的连接。

要增加连接限制,您必须更改postgresql.conf(默认为100) 它位于PostgreSQL数据目录中。

cat postgresql.conf | grep max_connection max_connections = 100
        # (change requires restart)
# Note:  Increasing max_connections costs ~400 bytes of shared memory per
# max_locks_per_transaction * (max_connections + max_prepared_transactions)

增加限制并重新启动PostgreSQL实例。

警告:增加连接限制会影响内存。

尝试在应用程序或数据库层中使用连接池优化连接。 在PostgreSQL上,您可以使用Pgpool2

答案 1 :(得分:5)

您使用的是连接池吗?检查代码中的连接是否正确关闭。这应该在try-finally块中完成:

Connection connection = dataSource.getConnection();
try {
    ....
}
finally {
    connection.close();
}

如果您确实需要大量连接,请相应地在postres中设置max_connections属性。

Documentation