12

一括挿入用の Java コードを作成しました。さまざまなテーブルのさまざまな接続オブジェクトをインポートおよび作成するために copy コマンドを使用していますが、実行中にプログラムで次のエラーがスローされます。

FATAL: connection limit exceeded for non-superusers
4

2 に答える 2

12

PostgreSQL サーバーの接続制限を超えました。スーパーユーザー用に予約された接続がいくつかあります。

接続制限を増やすには、PostgreSQL データ ディレクトリにある postgresql.conf (デフォルトは 100) を変更する必要があります。

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を使用できます。

于 2012-11-27T12:19:06.580 に答える
5

接続プールを使用していますか? コードで接続が適切に閉じられているかどうかを確認します。これは、try-finally ブロックで行う必要があります。

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

本当に大量の接続が必要な場合は、それに応じて postres の max_connections-property を設定してください。

ドキュメンテーション

于 2012-11-27T10:17:41.697 に答える