Aplikasi yang kami bangun mungkin menjalankan kueri insert yang cukup besar. Apakah ada batasan bahwa permintaan postgres saya hanya dapat memiliki sejumlah karakter?
postgresql
Kannan Ramamoorthy
sumber
sumber
Jawaban:
Untuk versi PostgreSQL saat ini (hingga 9,5), kueri diterima oleh backend dalam
Stringinfo
buffer, yang terbatas padaMaxAllocSize
, didefinisikan sebagai:(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:
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 samping1GB
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.sumber