A maioria das perguntas max_stack_depth
é sobre como ignorá-lo, ou aumentá-lo, etc. Estou ciente de que o limite padrão é 2 MB e não pode ser definido como maior que ulimit -s
. Gostaria de saber exatamente como o Postgres determina que uma consulta está acima do limite.
É o número de nós em um plano de explicação? Número de caracteres na consulta SQL bruta, após parâmetros, com ou sem parâmetros vinculados? etc.
Por exemplo, gostaria de fazer uma consulta como
SELECT a, b, c
FROM table
WHERE x IN (1, 2, 3);
e traduzir isso para um valor numérico (byte) que me diria o quão longe max_stack_depth
estou.
O PostgreSQL executa regularmente a função
stack_is_too_deep()
, que faz algo simples:ele declara uma variável automática (que está na pilha)
ele usa aritmética de ponteiro para calcular a distância de outra variável global estática (que foi inicializada na pilha quando o processo começou)
Não creio que haja uma maneira de acessar essas informações via SQL, a não ser escrevendo uma extensão C.