Mám tabuľkové pole typu jsonb a nižšie uvedené údaje.
{"roles": ["7", "73", "163"]}
Musím skontrolovať, či je „73“ prítomné alebo nie prostredníctvom postgresql.
Už som hľadal, ale jediné riešenie poskytuje objekt objektu, nie objekt poľa.
Skúsil som nižšie dotaz, ale to nefunguje
SELECT *
FROM table
WHERE field->"roles" ? ARRAY ["73"];
--updated--
Potrebujem iba ten záznam, ktorý má presnú hodnotu
{"role": ["7"]}
{"role": ["7", "73", "163"]}}
t. j. pole obsahuje iba „7“ a nič iné.
odpovede:
1 pre odpoveď č. 1Podľa dokumentácie https://www.postgresql.org/docs/current/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLE pre všetky vaše prípady:
Existuje –jedno– kľúč v poli json:
SELECT *
FROM table
WHERE field -> "roles" ? "73";
Existuje -any- z klávesov vpravo v poli json:
SELECT *
FROM table
WHERE field -> "roles" ?| ARRAY[ "7", "163" ] ;
Existuje vľavo json všetky kľúče vpravo:
SELECT *
FROM table
WHERE field -> "roles" ?& ARRAY[ "7", "163" ] ;
Zhoduje sa pole json - presne - so správnym poľom json:
SELECT *
FROM table
WHERE field -> "roles" = $$[ "7" ]$$::jsonb ;
Dúfajme, že pomôže :)