我们正在构建的应用程序可能会执行相当大的插入查询。我的 postgres 查询只能有一定数量的字符是否有限制?
Dan*_*ité 47
对于当前的 PostgreSQL 版本(最高 9.5),后端在Stringinfo缓冲区中接收查询,该缓冲区仅限于MaxAllocSize,定义为:
#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
Run Code Online (Sandbox Code Playgroud)
(见http://doxygen.postgresql.org/memutils_8h.html)
因此,查询的大小限制为1 GB (2^30),减去 1 个字节用于终止空字节。
如果客户端尝试发送更大的查询,则会返回如下所示的错误:
错误:内存不足
详细信息:无法将包含 0 个字节的字符串缓冲区再扩大N个字节。
哪里N是查询的大小。
请注意,1GB除了该1GB缓冲区之外,下面的查询可能还需要大量内存来解析、计划或执行。
如果您需要将大量文字推送到查询中,请考虑创建一个临时表,将COPY行放入其中并让主查询引用该临时表的替代方法。