54001: statement_too_complex
PostgreSQL意味
文が PostgreSQL で処理できる複雑さを超えている。通常、非常に深くネストした式や多数のネストした演算子により、式ツリーがパーサー/プランナーのスタック上限を超える。Class 54 (program_limit_exceeded) に属する。
原因
過度に深い括弧/ネストしたサブクエリや OR/AND の連鎖、自動生成された巨大な WHERE ... IN (...) リスト、または再帰ビューから生じる非常に大きな式ツリー。max_stack_depth の上限に達する。
対処方法
クエリを簡素化する: 長い IN リストは一時テーブルや VALUES セットに移して JOIN する、ネストした式を分割する、ORM が生成した巨大なクエリを見直す。本当に必要で OS のスタック上限が許す場合は、max_stack_depth を慎重に引き上げる (例: SET max_stack_depth = '4MB';)。ただし OS の ulimit 未満に保つ。