【问题标题】:How to resolve FATAL: connection limit exceeded for non-superusers如何解决 FATAL:非超级用户超出连接限制
【发布时间】:2012-11-14 22:28:23
【问题描述】:

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

FATAL: connection limit exceeded for non-superusers

【问题讨论】:

  • 我敢打赌,您没有从 Java 代码中正确关闭连接。
  • 您是否偶然为每个插入创建了一个新连接?

标签: java postgresql


【解决方案1】:

您已超出 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

【讨论】:

  • 或者您可以尝试终止连接。
【解决方案2】:

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

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

如果你确实需要大量的连接,请在 postres 中相应地设置 max_connections-property。

Documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2012-08-04
    • 2020-04-26
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多