В PostgreSQL общие табличные выражения (CTE) - это оптимизационные заграждения. Это означает, что CTE материализуется в память и что предикаты из другого запроса никогда не будут вдавлены в CTE.
Теперь мне интересно, будут ли другие метаданные об CTE, такие как упорядочение, разделяться на другие запросы. Возьмем следующий запрос:
WITH ordered_objects AS
(
SELECT * FROM object ORDER BY type ASC LIMIT 10
)
SELECT MIN(type) FROM ordered_objects
Здесь MIN(type), очевидно, всегда является первой строкой ordered_objects (или NULL если ordered_objects пусты), поскольку ordered_objects уже упорядочены по type. Доступны ли эти знания о ordered_objects при оценке SELECT MIN(type) FROM ordered_objects?