postgresクエリに最大長の制約はありますか?


33

作成中のアプリは、かなり大きな挿入クエリを実行する場合があります。私のpostgresクエリが特定の文字数しか持つことができないという制限はありますか?


2
その性質の何らかの制限に近づいている場合でも、デザインを再検討する必要があります。通常、接近するクエリは通常、何らかのフレームワーク(極端な文字列の連結を含む)によって生成され、現実との接触を失う傾向があることがわかりました。
ベレース

回答:


43

現在のPostgreSQLバージョン(最大9.5)では、クエリはStringinfoバッファ内のバックエンドによって受信MaxAllocSizeされます。

#define MaxAllocSize   ((Size) 0x3fffffff) /* 1 gigabyte - 1 */

http://doxygen.postgresql.org/memutils_8h.htmlを参照)

そのため、クエリのサイズは1ギガバイト(2 ^ 30)に制限され、終端のヌルバイトの場合はマイナス1バイトです。

クライアントがより大きなクエリを送信しようとすると、次のようなエラーが返されます。

エラー:メモリ不足
詳細:0バイトを含む文字列バッファをNバイト増やすことはできません。

ここNで、クエリのサイズです。

すぐ下のクエリ1GBでは、その1GBバッファーに加えて、大量のメモリを解析、計画、または実行する必要があることに注意してください。

大量のリテラルをクエリにプッシュする必要がある場合は、一時テーブルを作成してCOPY行を作成し、メインクエリがその一時テーブルを参照するようにすることを検討してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.