J'essaie d'obtenir les lignes d'une table où je veux que la condition vérifie une valeur d'une colonne jsonb. La colonne stocke les données sous la forme:

[{"UserId": 420, "Permission": "Create"}, {"UserId": 369, "Permission": "View"}]

Dans la fonction, je vérifie la valeur en utilisant:

tab."Books" @> '[{"UserId":420}]'

Mais je veux que le 420 soit remplacé par "ID" que je passe par la fonction. La seule façon dont je suis tombé sur était la concaténation (

tab."Books" @> '[{"UserId":'||ID||'}]'

Ce qui n'a pas aidé.

Est-ce que je fais mal? Veuillez suggérer une alternative le cas échéant. Merci.

0
Sanford-Tek 3 sept. 2020 à 15:40

2 réponses

Meilleure réponse

Vous devriez pouvoir uniquement cast:

tab."Books" @> ('[{"UserId":' || ID || '}]')::jsonb

Ou vous pouvez utiliser les fonctions json builder:

tab."Books" @> jsonb_build_array(jsonb_build_object('UserId', ID))
0
GMB 3 sept. 2020 à 12:44

Vous pouvez utiliser jsonb_build_object, puis le convertir en tableau JSON:

tab."Books" @> jsonb_build_array(jsonb_build_object('UserId', id))
0
a_horse_with_no_name 3 sept. 2020 à 12:44