Go プログラムで、 RabbitMQ から受信したメッセージごとに 1 つのデータベース接続を行うと、最大数を超えたためエラーが発生しました。
問題は、Go での SQL クエリの実行方法にあります。 sql.DB は、単一の接続ではなく、接続プールです。必要に応じて接続を開き、アイドル状態の接続を再利用しますが、この場合、接続は適切に解放されていません。
この問題は、返された *Row 値に対して Scan を呼び出さずに db.QueryRow を使用すると発生します。 *Row は接続への参照を保持し、Scan が呼び出されるときに自動的に解放されます。ただし、提供されたコードでは、Scan が呼び出されず、接続プールに接続が蓄積されてしまいました。
これを解決するには、出力が必要ない場合は db.Exec を使用します。または、db.QueryRow.
によって返された *Row 値に対して Scan を呼び出します。以上がGo で行を挿入する際の PostgreSQL 接続の枯渇を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。