54001: statement_too_complex
PostgreSQLЧто это значит?
Оператор сложнее, чем PostgreSQL может обработать; обычно из-за очень глубоко вложенных выражений или множества вложенных операторов дерево выражения превышает лимит стека анализатора/планировщика. Относится к классу 54 (program_limit_exceeded).
Почему возникает?
Чрезмерно глубокие скобки/вложенные подзапросы или цепочки OR/AND; огромные автоматически сгенерированные списки WHERE ... IN (...); либо очень большие деревья выражений, возникающие из-за рекурсивных представлений. Достигается лимит max_stack_depth.
Как исправить
Упростите запрос: перенесите длинные списки IN во временную таблицу или набор VALUES и соединяйте с ним через JOIN; разбейте вложенные выражения; пересмотрите огромные запросы, сгенерированные ORM. Если это действительно необходимо и лимит стека ОС позволяет, осторожно увеличьте max_stack_depth (например, SET max_stack_depth = '4MB';), но оставьте его ниже ulimit ОС.