Có giới hạn độ dài tối đa cho truy vấn postgres không?


33

Ứng dụng chúng tôi đang xây dựng có thể thực hiện khá nhiều truy vấn chèn lớn. Có giới hạn rằng truy vấn postgres của tôi chỉ có thể có một số lượng ký tự nhất định không?


2
Tôi chỉ nói rằng nếu bạn thậm chí tiếp cận bất kỳ giới hạn nào của bản chất đó, bạn sẽ cần xem xét lại thiết kế của mình. Tôi đã thấy rằng, thông thường, bất kỳ truy vấn nào đang đến gần thường được tạo bởi một loại khung (liên quan đến nối chuỗi cực đoan) và chúng có xu hướng mất liên lạc với thực tế.
Vérace

Câu trả lời:


43

Đối với phiên bản PostgreSQL hiện tại (tối đa 9,5), các truy vấn được nhận bởi một phụ trợ trong Stringinfobộ đệm, được giới hạn MaxAllocSize, được định nghĩa là:

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

(xem http://doxygen.postgresql.org/memutils_8h.html )

Vì vậy, một truy vấn được giới hạn ở kích thước 1 gigabyte (2 ^ 30), trừ đi 1 byte cho một byte null kết thúc.

Nếu khách hàng cố gắng gửi một truy vấn lớn hơn, một lỗi trông như thế này sẽ quay trở lại:

LRI: hết bộ nhớ
CHI TIẾT: Không thể phóng to bộ đệm chuỗi chứa 0 byte bằng N byte nữa.

nơi Nlà kích thước của truy vấn.

Hãy nhận biết rằng một truy vấn ngay dưới 1GBcó thể yêu cầu một lượng lớn bộ nhớ để được phân tích, kế hoạch hoặc thực hiện, thêm vào đó 1GBbộ đệm.

Nếu bạn cần đẩy một loạt lớn các chữ thành một truy vấn, hãy xem xét phương án tạo bảng tạm thời, COPYcác hàng vào đó và có truy vấn chính tham khảo bảng tạm thời đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.