Je vois des références fréquentes à des WITH
requêtes (expressions de table communes ou CTE) agissant comme une barrière d'optimisation, où le serveur n'est pas autorisé à pousser les filtres vers le bas dans les requêtes CTE, à extraire des expressions courantes hors du CTE, etc. être un comportement requis par les normes SQL.
Les CTE sont définitivement une barrière d'optimisation dans PostgreSQL ... mais est-ce requis par la norme, ou en fait juste des détails d'implémentation?
Par exemple, ces messages de liste de diffusion affirment ou suggèrent que c'est standard:
Après l'avoir mentionné dans un commentaire, on m'a demandé où il était spécifié - et après avoir regardé le seul projet de SQL: 2008 auquel j'ai accès, je n'ai pas beaucoup de chance de le trouver.
Je n'ai pas encore étudié de manière intensive la norme, j'espère donc une suggestion de quelqu'un qui a: L'optimisation des clôtures des CTE dans PostgreSQL est-elle réellement requise par la norme? Et si oui, où est-il spécifié? Ou les déclarations sur la liste de diffusion Pg sont-elles erronées?
Voir aussi le thread d' optimisation CTE sur la liste des tâches? .
STABLE
ouIMMUTABLE
fonctionne.