WITH
クエリ(共通テーブル式、またはCTE)への頻繁な参照が最適化フェンスとして機能し、サーバーがフィルターをCTEクエリにプッシュダウンしたり、共通式をCTEから取り出したりすることを許可されていないことがよくあります。 SQL標準で要求される動作であるため。
CTEは間違いなくPostgreSQLの最適化フェンスです...しかし、これは標準で必要なのですか、実際には実装の詳細だけですか?
たとえば、これらのメーリングリストの投稿は、それが標準であると主張または示唆しています。
コメントでそれを言及した後、私はそれがどこに指定されているのか尋ねられました-そしてSQL:2008の唯一のドラフトを見た後、私はそれを見つける運があまりありません。
私はまだ標準を徹底的に研究していないので、次のような人からの提案を期待しています。もしそうなら、それはどこに指定されていますか?または、Pgメーリングリストのステートメントにエラーがありますか?
ToDoリストのスレッドCTE最適化フェンスも参照してください。。
STABLE
またはIMMUTABLE
関数のみを呼び出すCTEを自由にインライン化できることを意味すると思います。