关于的大多数问题max_stack_depth
都是关于如何绕过它,或者增加它等等。我知道默认限制是 2MB,不能设置为高于ulimit -s
。我想知道 Postgres 究竟是如何确定查询超出上述限制的。
它是解释计划中的节点数吗?原始 SQL 查询中的字符数(参数后,有或没有绑定参数)?等等。
例如我想进行如下查询
SELECT a, b, c
FROM table
WHERE x IN (1, 2, 3);
并将其转换为数值(字节),该值可以告诉我距离max_stack_depth
我有多远。
PostgreSQL 定期运行该函数
stack_is_too_deep()
,该函数执行一些简单的操作:它声明了一个自动变量(位于堆栈上)
它使用指针算法来计算与另一个静态全局变量(在进程启动时在堆栈上初始化)的距离
我认为,除了编写 C 扩展之外,没有其他方法可以通过 SQL 访问该信息。