L'opérateur n'existe pas: json = json
quand j'essaie de sélectionner un fichier à partir d'une table
SELECT * FROM movie_test WHERE tags = ('["dramatic","women", "political"]'::json)
Le code sql de fonte d'une erreur
LINE 1: SELECT * FROM movie_test WHERE tags = ('["dramatic","women",...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
********** 错误 **********
ERROR: operator does not exist: json = json
SQL 状态: 42883
指导建议:No operator matches the given name and argument type(s). You might need to add explicit type casts.
字符:37
Ai-je raté quelque chose ou si je peux apprendre quelque chose à propos de cette erreur.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas comparer json valeurs. Vous pouvez comparer les valeurs de texte à la place:
Toutefois, de noter que les valeurs de type
json
sont stockés en tant que texte dans un format dans lequel ils sont donnés. Ainsi, le résultat de la comparaison dépend de si vous de toujours appliquer le même format:Dans Postgresql 9.4+ vous pouvez résoudre ce problème en utilisant le type de
jsonb
, qui est stockée dans une décomposé en format binaire. Les valeurs de ce type peuvent être comparées:si cette requête est beaucoup plus fiable:
Lire plus sur JSON Types.
List.where("nutrition_constraints::jsonb -> 'vegetarian' ? '1'").first
.