PostgreSQL JSONB ATATYPE i funkcje

PostgreSQL JSONB ATATYPE i funkcje

Jak w 9.2 wersja, PostgreSQL dodał dość podstawowy zestaw danych JSON. Pod osłoną typem JSON jest tekstem, z kontrolą, że być może układ jest prawidłowy wejście JSON podobne do XML. Ostatecznie zespół stwierdził, że wielkość przetwarzania JSON i wyspecjalizowane wyszukiwanie potrzebne w PostgreSQL byłoby trudne lub racjonalne do egzekwowania przez dane tekstowe danych. Stąd stworzyli binarną reprezentację danych JSON z pełnym zakresem operatorów i metod. Oto typ danych JSONB. Zestaw danych JSONB jest wszechstronnym układem przechowywania binarnego z pełnym możliwościami przetwarzania, indeksowania i wyszukiwania. W rezultacie przetwarza informacje o JSON do wewnętrznego układu, który ma tylko jedną wartość na klucz i ignoruje dodatkową białe listy lub depresję, lub można powiedzieć, że wcięcie. W ramach tego przewodnika dowiesz się, jak wchodzić w interakcje z formularzem danych JSONB w PostgreSQL, a także niektórym przydatnym operatorom i metodom radzenia sobie z danymi JSONB.

Typ danych, którego najprawdopodobniej potrzebujesz i wybierzesz, to JSONB, a nie wersja wczesna JSON, która jest używana tylko do kompatybilności wstecznej. Otwórz więc powłokę poleceń PostgreSQL i podaj nazwy serwera, bazę danych, port i nazwę użytkownika.

Przykład 01:

Oto krótka ilustracja zmian między dwoma typami danych. Musimy utworzyć tabelę „nową” z jedną z jej kolumn, musi być typem danych „JSON” w następujący sposób:

>> Utwórz tabelę NOWOŚĆ (ID Serial Primary Key, Val Json);

Włóż niektóre wartości do kolumny „Val”.

>> Włóż do nowych (val) wartości ('[1, 2, 3, 4]'), ('[10, 11, 12, 13]'), ('„key”: „wartość”') ;

Użycie operatora „@>”

Gdy spróbujemy szukać wpisów z liczbą całkowitą na liście kolumn „Dodatkowe”, zawsze otrzymujemy komunikat o błędzie zgodnie z dołączeniem poniżej.

>> Wybierz * z nowego, gdzie val @> '11';

Tak. JSON to po prostu tekst i nie jest bardzo wydajny i nie zawiera konfiguracji operatora. Niech treść zostanie zmieniona na JSONB.

>> Zmień tabelę NOWOŚĆ ZMIENIK COUNT VAL JSONB;

Teraz wykonaj to samo zapytanie w powłoce, a wynik pokazuje jeden wiersz o liczbie „11” w swojej tablicy, jak podano poniżej.

>> Wybierz * z nowego, gdzie val @> '11';

Przykład 02:

Zróbmy stół „torba” do użycia w naszych ilustracjach, dopóki nie zaczniemy mówić o metodach i operatorach użytecznych dla typu danych JSONB PostgreSQL. Jedna z jego kolumn, e.G. „Brand” musi być „JSONB” danych w następujący sposób:

>> Utwórz torbę tabeli (ID szeregowy klucz podstawowy, marka JSONB nie null);

Użyjemy następującej deklaracji SQL Insert, aby dodać informacje do tabeli PostgreSQL „Bag”:

>> Wstaw do torby (marki) wartości ('„name”: „gucci”, „kolor”: [„czerwony”, „czarny”], „cena”: 10000, „sprzedał”: true,]') , ('„name”: „allure”, „kolor”: [„czerwony”, „szary”], „cena”: 85000, „sprzedano”: false,]'), ('„name”: „Kidza”, „Color”: [„Black”, „White”], „Price”: 75000, „sprzedany”: true,] ');

Możesz zobaczyć, że dane zostały dodane w postaci słownika, e.G., klucze i wartości.

Elementy tej tabeli „torba” można zobaczyć za pomocą wybranego zdania, jak pokazano poniżej:

>> Wybierz * z torby;

Użycie operatora '->'

Poszukajmy wartości w kolumnie „Brand” za pomocą klucza „Nazwa” za pomocą operatora „->” w naszym zapytaniu. Przyniesie wszystkie rekordy klucza „nazwa” z marki kolumny. Wyjście zostanie pokazane w nowej kolumnie „marka”. Ostateczne wyjście pojawią się zgodnie z dodatkiem poniżej. Jak widać, mamy trzy wartości: „Gucci, Allure, Kidza” dla kluczowego „nazwy”.

>> Wybierz markę -> „Nazwa” jako marka z torby;

Użycie operatora „->” przy użyciu klauzuli Where

Pobierajmy wszystkie te rzędy z tabeli „Bag”, w których kolumna „marki” ma wartość „prawdziwa” dla jej klucza „sprzedanego”. Zapytanie do tego wyboru jest następujące:

>> Wybierz * z torby, w której marka -> „sprzedała” = „true”;

Tam widzisz, zapytanie przyniosło dwa rzędy tylko z tabeli „torba”, ponieważ ma tylko dwa rzędy o wartości „prawdziwej” dla klucza „sprzedanego”.

Funkcje JSONB Postgresql:

W przypadku informacji JSONB wydaje się, że istnieje wiele metod wbudowanych, których można użyć. Rzućmy na nich okiem jeden po drugim.

JSONB Każda funkcja:

JSONB Każda funkcja przenosi dane i przekształca ją w parę key_value. Rozważ następujące zapytanie metody JSONB_EACH, w której podaliśmy wartości. Dane JSON o najwyższym poziomie są rozszerzane na serię kombinacji wartości kluczowej w wyniku. Mamy dwie pary wartości kluczowej, jak pokazano poniżej.

>> Wybierz jsonb_each ('„name”: „allure”, „sprzedał”: „true”' :: jsonB);

Funkcja kluczy obiektowych JSONB:

Teraz przyjrzymy się funkcji JSONB_OBject_keys. Ta funkcja przyjmuje dane i sama oddziela i identyfikuje kluczowe wartości. Wypróbuj poniższe zapytanie, w którym używamy metody JSONB_OBject_keys i podano pewne wartości. Ta metoda zwróci tylko klucze dokumentu najwyższego poziomu JSON dla konkretnych danych, jak pokazano poniżej.

>> Wybierz JSONB_OBject_keys ('„Nazwa”: „Kidza”, „sprzedał”: „true”' :: jsonB);

Funkcja ścieżki ekstraktu JSONB:

Funkcja ścieżki ekstraktu JSONB zajmuje ścieżkę, aby pokazać wartość w wyniku. Wypróbuj poniższe zapytanie w powłoce poleceń, w której dostarczyliśmy „markę” jako ścieżkę do metody JSONB JSONB_EXTRACT_PATH. Ze wyjścia przedstawionego na poniższym obrazku widać, że „Gucci” jest zwróconą wartością do ścieżki „Nazwa”.

>> Wybierz jsonb_extract_path ('„name”: „gucci”, „sprzedał”: true ”:: jsonb,„ name ”);

JSONB ładna funkcja:

Jeśli chcesz wyświetlić pliki JSON z łatwym do odczytania układu, najlepsza funkcja JSONB jest najlepszą opcją. Wypróbuj poniższe zapytanie, a otrzymasz proste wyjście.

>> Wybierz jsonb_pretty ('„name”: „allure”, „sprzedał”: false' :: jsonB);

Wniosek:

Podczas przechowywania informacji JSONB w bazach danych PostgreSQL uzyskasz najlepszy możliwy wynik: prostota i niezawodność bazy danych NoSQL w połączeniu z zaletami relacyjnej bazy danych. Korzystając z wielu operatorów i metod, wykazaliśmy, jak korzystać z JSONB PostgreSQL. Będziesz w stanie pracować z danymi JSONB przy użyciu naszych ilustracji jako odniesienia.