Aplikasi yang kami bangun mungkin menjalankan kueri insert yang cukup besar. Apakah ada batasan bahwa permintaan postgres saya hanya dapat memiliki sejumlah karakter?
Aplikasi yang kami bangun mungkin menjalankan kueri insert yang cukup besar. Apakah ada batasan bahwa permintaan postgres saya hanya dapat memiliki sejumlah karakter?
Jawaban:
Untuk versi PostgreSQL saat ini (hingga 9,5), kueri diterima oleh backend dalam Stringinfo
buffer, yang terbatas pada MaxAllocSize
, didefinisikan sebagai:
#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
(lihat http://doxygen.postgresql.org/memutils_8h.html )
Jadi kueri terbatas pada ukuran 1 gigabyte (2 ^ 30), minus 1 byte untuk terminasi null byte.
Jika klien mencoba mengirim permintaan yang lebih besar, kesalahan yang tampak seperti ini akan muncul kembali:
GALAT: kehabisan memori.
RINCIAN: Tidak dapat memperbesar buffer string yang berisi 0 byte demi N lebih banyak byte.
di mana N
ukuran kueri.
Perlu diketahui bahwa permintaan tepat di bawah ini 1GB
mungkin membutuhkan memori dalam jumlah besar untuk diuraikan, direncanakan atau dieksekusi, di samping 1GB
buffer itu.
Jika Anda perlu mendorong serangkaian literal besar ke dalam kueri, pertimbangkan alternatif membuat tabel sementara, COPY
baris ke dalamnya dan minta kueri utama merujuk ke tabel sementara itu.