Postgres renvoie [null] au lieu de [] pour array_agg de la table de jointure

Je suis la sélection de certains objets et de leurs balises dans Postgres. Le schéma est assez simple, trois tables:

objets id

taggings id | object_id | tag_id

tags id | tag

Je suis de rejoindre les tables comme ceci, à l'aide de array_agg pour agréger les balises dans un champ:

SELECT objects.*,
    array_agg(tags.tag) AS tags,
FROM objects
LEFT JOIN taggings ON objects.id = taggings.object_id
LEFT JOIN tags ON tags.id = taggings.tag_id

Toutefois, si l'objet n'a pas de balises, Postgres retourne ceci:

[ null ]

au lieu d'un tableau vide. Comment puis-je retourner un tableau vide quand il n'y a pas de balises? J'ai vérifié que je n'ai pas de nulle tag retourné.

La agrégation docs dire "Le confluent de la fonction peut être utilisée pour remplacer zéro ou un tableau vide pour null si nécessaire". J'ai essayé COALESCE(ARRAY_AGG(tags.tag)) as tags mais encore, elle retourne un tableau avec la valeur null. J'ai essayé de faire le deuxième paramètre de nombreuses choses (comme COALESCE(ARRAY_AGG(tags.tag), ARRAY()), mais ils ont tous entraîner des erreurs de syntaxe.

  • À mon humble avis l'agrégation devrait revenir tableau vide, je ne sais pas pourquoi ils ont décidé de retourner null. Il y a peut être une raison, mais quelque chose de renvoyer un tableau ne doit pas renvoyer de null.
InformationsquelleAutor Andy Ray | 2015-06-29