Ứ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 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 đó.