Creo que OFFSET 0
es el mejor enfoque ya que es más obvio que es un truco que muestra que algo raro está pasando, y es poco probable que alguna vez cambiemos el comportamiento del optimizador alrededor de OFFSET 0
... mientras que esperemos que los CTE se vuelvan inlineables en algún momento Los CTE se volvieron inlineables de forma predeterminada en PostgreSQL 12. La siguiente explicación es completa; usa la respuesta de Seamus.
Para subconsultas no correlacionadas, podría explotar la negativa de PostgreSQL 11 y versiones anteriores a WITH
en línea términos de consulta para reformular su consulta como:
WITH t AS (
SELECT * FROM tbl WHERE id IN ('6d48fc431d21', 'd9e659e756ad')
)
SELECT COUNT(*)
FROM t
WHERE data ? 'building_floorspace'
AND data ?| ARRAY['elec_mean_monthly_use', 'gas_mean_monthly_use'];
Esto tiene el mismo efecto que OFFSET 0
piratear y darle me gusta al offset 0
hack explota peculiaridades en el optimizador de Pg que la gente usa para sortear la falta de sugerencias de consulta de Pg... usándolas como sugerencias de consulta.
Pero el OFFSET 0
hack es algo bendecido oficialmente, mientras que el abuso de CTE ya no funciona en PostgreSQL 12. (¡Yay!).