Ứ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?
Ứ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?
Câu trả lời:
Đố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 Stringinfo
bộ đệ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 N
là 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 1GB
có 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 đó 1GB
bộ đệ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, COPY
các hàng vào đó và có truy vấn chính tham khảo bảng tạm thời đó.