มีข้อจำกัดความยาวสูงสุดสำหรับคิวรี Postgres หรือไม่


33

แอปที่เรากำลังสร้างอาจเรียกใช้คิวรีแทรกขนาดใหญ่ได้ มีข้อ จำกัด หรือไม่ที่แบบสอบถาม postgres ของฉันสามารถมีอักขระได้จำนวนเท่าใด


2
ฉันแค่บอกว่าถ้าคุณใกล้ถึงขีด จำกัด ของธรรมชาติคุณจะต้องพิจารณาการออกแบบของคุณใหม่ ฉันได้พบว่าโดยปกติแล้วแบบสอบถามใด ๆ ที่ใกล้เข้ามามักจะถูกสร้างขึ้นโดยกรอบการทำงานบางประเภท
Vérace

คำตอบ:


43

สำหรับเวอร์ชัน PostgreSQL ปัจจุบัน (มากถึง 9.5) แบ็กเอนด์จะได้รับแบบสอบถามในStringinfoบัฟเฟอร์ซึ่ง จำกัดMaxAllocSizeไว้ที่:

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

(ดูhttp://doxygen.postgresql.org/memutils_8h.html )

ดังนั้นการสืบค้นจึง จำกัดขนาด 1 กิกะไบต์ (2 ^ 30) ในขนาดลบ 1 ไบต์สำหรับการยกเลิก null null

หากลูกค้าพยายามส่งข้อความค้นหาที่มีขนาดใหญ่ขึ้นข้อผิดพลาดที่มีลักษณะเช่นนี้จะกลับมา:

ข้อผิดพลาด: หน่วยความจำ
ไม่เพียงพอรายละเอียด: ไม่สามารถขยายบัฟเฟอร์สตริงที่มี 0 ไบต์ต่อN ได้อีกไบต์

ที่Nมีขนาดของแบบสอบถาม

โปรดทราบว่าแบบสอบถามด้านล่าง1GBอาจต้องใช้หน่วยความจำจำนวนมากในการแยกวิเคราะห์วางแผนหรือดำเนินการนอกเหนือจาก1GBบัฟเฟอร์นั้น

หากคุณต้องการส่งชุดตัวอักษรจำนวนมากไปยังคิวรีให้พิจารณาทางเลือกในการสร้างตารางชั่วคราวCOPYแถวเข้าไปและมีคิวรีหลักอ้างอิงถึงตารางชั่วคราวนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.