Otra opción podría ser array_remove(..., NULL) (introducido en 9.3
) si tags.tag es NOT NULL (de lo contrario, es posible que desee mantener NULL valores en la matriz, pero en ese caso, no puede distinguir entre un único NULL existente etiqueta y un NULL etiqueta debido a 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
Si no se encuentran etiquetas, se devuelve una matriz vacía.