Je veux vérifier qu'une colonne json[]
the_array
N'est pas vide. Pour un tableau normal, je pourrais vérifier:
the_array != '{}'
Cependant, cela ne fonctionne pas pour un json[]
, Comme illustré ci-dessous:
select '{}'::json[] != '{}'
ERROR: could not identify an equality operator for type json
Je pourrais utiliser la vérification suivante à la place:
array_length(the_array, 1) != null // yes, array_length on an
empty array returns null
Ma crainte est que array_length()
itère sur tout le tableau pour compter le nombre d'éléments, puis renvoie ce nombre. Dans mon cas, je n'ai pas besoin de la taille réelle du tableau, j'ai juste besoin de savoir s'il est vide ou non.
Alors, array_length()
itère-t-il sur tout le tableau? Et si oui, existe-t-il une meilleure façon de vérifier si un tableau json est vide?
Cela ne renvoie pas un tableau JSON.
SELECT '{}'::json[]
Le type json[]
N'est pas un "tableau JSON", c'est un tableau SQL de type JSON. Vous ne devriez jamais utiliser ce type de structure. C'est presque certainement un drapeau rouge de mauvaise conception.
Ce que vous voulez vérifier, c'est qu'un vrai tableau JSON n'est pas vide, vous pouvez le faire avec jsonb_array_length(jsonb)
. JSON est stocké sous la forme JSON
ou JSONB
pour json binaire.
SELECT jsonb_array_length( '[]'::jsonb );
Pour voir s'il est vide,
SELECT jsonb_array_length( '[]'::jsonb ) = 0;
Attention, cela ne compte que ces éléments, ils peuvent être nuls ,
SELECT jsonb_array_length( '[null]'::jsonb );
Donc, vous voudrez peut-être appeler jsonb_strip_nulls()
sur le tableau en premier.