Un'altra opzione potrebbe essere array_remove(..., NULL) (introdotto in 9.3
) se tags.tag è NOT NULL (altrimenti potresti voler mantenere NULL valori nell'array, ma in tal caso non è possibile distinguere tra un singolo NULL esistente tag e un NULL tag a causa del 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 non vengono trovati tag, viene restituito un array vuoto.