Outra opção pode ser
array_remove(..., NULL)
(introduzido na versão 9.3
) se tags.tag
é NOT NULL
(caso contrário, você pode querer manter NULL
valores na matriz, mas nesse caso, você não pode distinguir entre um único NULL
existente tag e um NULL
tag devido ao LEFT JOIN
):SELECT objects.*,
array_remove(array_agg(tags.tag), NULL) AS tags,
FROM objects
LEFT JOIN taggings ON objects.id = taggings.object_id
LEFT JOIN tags ON tags.id = taggings.tag_id
Se nenhuma tag for encontrada, uma matriz vazia será retornada.