Como @Denis ya comentó:no hay necesidad de LATERAL
.Además, su subconsulta seleccionó la columna incorrecta. Esto funciona:
SELECT t1.t1_id, t1.t1_data, t2_ids
FROM t1
LEFT JOIN (
SELECT t1_id, array_agg(t2_id) AS t2_ids
FROM t1_t2_rel
GROUP BY 1
) sub USING (t1_id);
Rendimiento y pruebas
Con respecto al escaneo secuencial posterior que menciona:si consulta toda la tabla, un escaneo secuencial suele ser más rápido . Depende de la versión que esté ejecutando, su hardware, su configuración y estadísticas de cardinalidades y distribución de sus datos. Experimente con WHERE
selectivo cláusulas como WHERE t1.t1_id < 1000
o WHERE t1.t1_id = 1000
y combinar con configuración del planificador
para obtener información sobre las opciones:
SET enable_seqscan = off;
SET enable_indexscan = off;
Para restablecer:
RESET enable_seqscan;
RESET enable_indexscan;
¡Solo en tu sesión local, eso sí! Esta respuesta relacionada en dba.SE
tiene más instrucciones.
Por supuesto, su configuración también puede estar desactivada: