Comme @Denis l'a déjà commenté :pas besoin de LATERAL
.En outre, votre sous-requête a sélectionné la mauvaise colonne. Cela fonctionne :
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);
Performances et tests
Concernant l'analyse séquentielle qui s'ensuit, vous mentionnez :Si vous interrogez toute la table, une analyse séquentielle est souvent plus rapide . Cela dépend de la version que vous utilisez, de votre matériel, de vos paramètres et des statistiques de cardinalités et de la distribution de vos données. Expérimentez avec WHERE
sélectif des clauses comme WHERE t1.t1_id < 1000
ou WHERE t1.t1_id = 1000
et combiner avec paramètres du planificateur
pour en savoir plus sur les choix :
SET enable_seqscan = off;
SET enable_indexscan = off;
Pour réinitialiser :
RESET enable_seqscan;
RESET enable_indexscan;
Seulement dans votre session locale, attention ! Cette réponse connexe sur dba.SE
contient plus d'instructions.
Bien sûr, votre paramètre peut également être désactivé :