PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres retorna [null] em vez de [] para array_agg da tabela de junção


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.