Eu vejo referências freqüentes a WITH
consultas (expressões comuns de tabela ou CTEs) atuando como uma cerca de otimização, onde o servidor não tem permissão para enviar filtros para as consultas CTE, extrair expressões comuns do CTE etc. ser um comportamento exigido pelos padrões SQL.
Definitivamente, as CTEs são uma barreira de otimização no PostgreSQL ... mas isso é exigido pelo padrão ou, na verdade, apenas detalhes de implementação?
Por exemplo, essas postagens na lista de discussão afirmam ou sugerem que é padrão:
Depois de mencioná-lo em um comentário , perguntaram-me onde é especificado - e, depois de analisar o único rascunho do SQL: 2008, tenho acesso e não estou tendo muita sorte em encontrá-lo.
Ainda não estudei intensivamente o padrão, por isso espero uma sugestão de alguém que tenha: A vedação de otimização de CTEs no PostgreSQL é realmente exigida pelo padrão? E se sim, onde está especificado? Ou as instruções da lista de correspondência da Pg estão erradas?
Veja também a cerca de otimização CTE do thread na lista de tarefas? .
STABLE
ouIMMUTABLE
funcionam.