一括挿入用の Java コードを作成しました。さまざまなテーブルのさまざまな接続オブジェクトをインポートおよび作成するために copy コマンドを使用していますが、実行中にプログラムで次のエラーがスローされます。
FATAL: connection limit exceeded for non-superusers
一括挿入用の Java コードを作成しました。さまざまなテーブルのさまざまな接続オブジェクトをインポートおよび作成するために copy コマンドを使用していますが、実行中にプログラムで次のエラーがスローされます。
FATAL: connection limit exceeded for non-superusers
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を使用できます。
接続プールを使用していますか? コードで接続が適切に閉じられているかどうかを確認します。これは、try-finally ブロックで行う必要があります。
Connection connection = dataSource.getConnection();
try {
....
}
finally {
connection.close();
}
本当に大量の接続が必要な場合は、それに応じて postres の max_connections-property を設定してください。