postgres 查询是否有最大长度限制?

Kan*_*thy 36 postgresql

我们正在构建的应用程序可能会执行相当大的插入查询。我的 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行放入其中并让主查询引用该临时表的替代方法。