我已经编写了一个用于批量插入的java代码。我正在使用copy命令为不同的表导入和创建不同的连接对象,但在执行时,程序会抛出以下错误:
FATAL: connection limit exceeded for non-superusers
答案 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属性。