PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment interroger une colonne json pour les objets vides ?

Il n'y a pas d'opérateur d'égalité (ou d'inégalité) pour le type de données json dans son ensemble, car l'égalité est difficile à établir. Considérez jsonb dans Postgres 9.4 ou version ultérieure, lorsque cela est possible. Plus de détails dans cette réponse connexe sur dba.SE (dernier chapitre):

  • Comment supprimer des éléments connus d'un tableau JSON[] dans PostgreSQL ?

SELECT DISTINCT json_column ... ou ... GROUP BY json_column échoue pour la même raison (pas d'opérateur d'égalité).

Conversion des deux côtés de l'expression en text autorise = ou <> opérateurs, mais ce n'est normalement pas fiable car il existe de nombreuses représentations textuelles possibles pour le même Valeur JSON. Dans Postgres 9.4 ou version ultérieure, convertissez en jsonb Au lieu. (Ou utilisez jsonb pour commencer.)

Cependant , pour ce cas particulier (objet vide ) ça marche très bien :

select * from test where foo::text <> '{}'::text;