PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie Postgresql dla obiektów w zagnieżdżonym polu JSONB

Powinieneś zapoznać się z funkcjami i operatorami JSON .

-- #1
select *
from example
where content->'Item'->>'Name' ilike '%dog%'
and content->'Item'->>'Spec' ilike '%red%'

-- #2
select *
from example
where content->'Item'->>'Name' ilike '%dog%'
or content->'Item'->>'Spec' ilike '%red%'

-- #3
select distinct on(no) t.*
from example t,
lateral jsonb_each_text(content->'Item')
where value ilike '%dog%';

-- and
select *
from example t
order by length(content->'Item'->>'Name');

Postgres 12 wprowadza nowe funkcje implementujące język SQL/JSON Path Language. Alternatywne zapytania przy użyciu jsonpath może wyglądać tak:

-- #1
select *
from example
where jsonb_path_exists(
    content, 
    '$ ? ($.Item.Name like_regex "dog" flag "i" && $.Item.Spec like_regex "red" flag "i")');

-- #2
select *
from example
where jsonb_path_exists(
    content, 
    '$ ? ($.Item.Name like_regex "dog" flag "i" || $.Item.Spec like_regex "red" flag "i")');

-- #3
select *
from example
where jsonb_path_exists(
    content, 
    '$.Item.* ? (@ like_regex "dog" flag "i")');

Pierwsze dwa zapytania są w zasadzie podobne do poprzednich i -> składnia może wydawać się prostsza i przyjemniejsza niż jsonpath jeden. Szczególną uwagę należy zwrócić na trzecie zapytanie, które wykorzystuje symbol wieloznaczny, dzięki czemu eliminuje potrzebę korzystania z kosztownej funkcji jsonb_each_text () i powinien być znacznie szybszy.

Przeczytaj w dokumentacji:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest najlepszy framework wysokiej dostępności PostgreSQL? PAF vs. repmgr vs. Patroni Infografika

  2. Wymyśl błąd klucza podstawowego w postgresql, heroku, Railsach 4

  3. Dostrajanie operacji wejścia/wyjścia (I/O) dla PostgreSQL

  4. importowanie pliku osm do bazy danych postgres/postgis

  5. Jak zainstalować klejnot pg PostgreSQL na Ubuntu?