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

Jak wykonać zapytanie za pomocą pól w nowym typie danych PostgreSQL JSON?

Postgres 9.2

Cytuję Andrew Dunstana z listy pgsql-hackerów:

Na pewnym etapie prawdopodobnie pojawią się funkcje przetwarzania json (w przeciwieństwie do tworzenia json), ale nie w wersji 9.2.

Nie przeszkadza mu to w podaniu przykładowej implementacji w PLV8, która powinna rozwiązać Twój problem. (Link nie działa, zobacz zamiast tego nowoczesny PLV8.)

Postgres 9.3

Oferuje arsenał nowych funkcji i operatorów, aby dodać „przetwarzanie json”.

  • Podręcznik dotyczący nowej funkcjonalności JSON.
  • Wiki Postgres o nowych funkcjach na stronie 9.3.

Odpowiedź na pierwotne pytanie w Postgresie 9.3:

SELECT *
FROM   json_array_elements(
  '[{"name": "Toby", "occupation": "Software Engineer"},
    {"name": "Zaphod", "occupation": "Galactic President"} ]'
  ) AS elem
WHERE elem->>'name' = 'Toby';

Przykład zaawansowany:

  • Kombinacje zapytań z zagnieżdżoną tablicą rekordów w typie danych JSON

W przypadku większych tabel możesz dodać indeks wyrażenia, aby zwiększyć wydajność:

  • Indeks do znajdowania elementu w tablicy JSON

Postgres 9.4

Dodaje jsonb (b dla "binarnego", wartości są przechowywane jako natywne typy Postgresa) i jeszcze więcej funkcji dla obu typy. Oprócz indeksów wyrażeń wspomnianych powyżej, jsonb obsługuje również indeksy GIN, btree i hash, z których GIN jest najpotężniejszym z nich.

  • Podręcznik dotyczący json i jsonb typy danych i funkcje.
  • Wiki Postgres w JSONB na stronie 9.4

Instrukcja sugeruje nawet:

Ogólnie większość aplikacji powinna preferować przechowywanie danych JSON jako jsonb , chyba że istnieją dość wyspecjalizowane potrzeby, takie jak założenia dotyczące kolejności kluczy obiektowych.

Pogrubiony nacisk na moje.

Wydajność zyskuje dzięki ogólnym ulepszeniom indeksów GIN.

Postgres 9.5

Uzupełnij jsonb funkcje i operatory. Dodaj więcej funkcji, aby manipulować jsonb na miejscu i do wyświetlania.

  • Główne dobre wieści w informacjach o wydaniu Postgresa 9.5.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:porównanie ciągów bez rozróżniania wielkości liter

  2. Zabij sesję/połączenie postgresql

  3. Kiedy nazwy kolumn lub tabel Postgresa wymagają cudzysłowów, a kiedy nie?

  4. Użyj \copy psql dla zapytania wielowierszowego

  5. Przechowywanie json, jsonb, hstore, xml, enum, ipaddr itp. kończy się niepowodzeniem, ponieważ kolumna x jest typu json, ale wyrażenie ma charakter zmienny