HStore – prosty magazyn klucz-wartość

HSTore dictionary

Typ HStore w Postgresie jest magazynem klucz-wartość (key-value). Działanie HStore jest bardzo zbliżone do używania słownika w innym języku programowania. Może znaleźć zastosowanie przy danych częściowo ustrukturyzowanych lub takich, które nie zawsze będziemy chcieli pobierać, mniej ważniejszych.

Wraz z wydaniem Postgres w wersji 9.4 i dodaniu obsługi JSONB, w większości przypadków staje się to lepszym podejściem niż po prostu HStore. Niemniej jednak, sama znajomość HStore może okazać się przydatna, a funkcjonalności jakie oferuje – wystarczające.

Włączenie HStore

Jeśli nigdy wcześniej nie spotkałeś się z typem HStore, to prawdopodobnie nie jest on aktywny w Twojej bazie Postgres. Aby korzystać z typu danych HStore, musimy włączyć rozszerzenie HStore.
Składnia dodania HStore do naszej bazy danych jest następująca:

Wykorzystanie HStore

Po wykonaniu tej komendy, możemy stworzyć pierwszą tabelę wykorzystującą typ HStore w jednej z kolumn (elements).

Oczywiście możliwa też jest zmiana istniejącego typu tekstowego (varchar) na HStore, pod warunkiem spełnienia wymaganego formatu zapisanego ciągu znaków. Format ten (klucz-wartość, rozdzielone przecinkami) prezentuje się następująco:

key1 => value1, key2 => value2

W poleceniach INSERT/UPDATE wartości key, oraz value, mogą znajdować się w cudzysłowach („key” => „value”), jednak ostateczny format jest upraszczany do tego przedstawionego powyżej.

Odbierz darmowy eBook

Słownik w praktyczne

Masz już uruchomiony moduł HStore, oraz pierwszą tabelę wykorzystującą ten typ w Postgresql. Teraz pora na wykorzystanie HStore w praktycznym przykładzie. Najpierw umieśćmy w tabeli kilka przykładowych rekordów, a następnie zobaczysz jak można wykorzystać HStore w zapytaniach (SELECT).

Pora na praktyczne wykorzystanie HStore:

Pierwsze zapytania zwraca wszystkie dane z tabeli items – możemy zweryfikować wprowadzone wcześniej dane.
Kolejne (2,3) pobierają konkretne fragmenty z słownika HStore. W przypadku braku danego klucza w słowniku, zwracana jest wartość null. W kolejnym zapytaniu (4) zwrócone zostaną detale przedmiotów, które posiadają dany klucz w HStore elements, pozostałe zostaną odfiltrowane. Warto zauważyć, że przy wykorzystaniu grupowania (GROUP BY) w przypadku braku danego klucza, powstaje też grupa z kluczem o wartości null – czyli pozostałe, nie posiadające tego klucza elementy tworzą oddzielną grupę.

Update HStore

Oczywistym jest, że prędzej czy później, będziesz chciał wprowadzić zmiany w danych, rozszerzyć elements o kolejne atrybuty, lub aktualizować obecne. Funkcja UPDATE działa płynnie i intuicyjnie.

Możliwości jakie otrzymujesz są kompletne: możesz zmienić wartość dla istniejącego klucza, dodać nieistniejący klucz, lub też klucz usunąć, w jednym elemencie lub w całej grupie, w zależności od warunku WHERE.

Podsumowanie

Mam nadzieję, że udało mi się przybliżyć Tobie typ HStore w PostgreSQL. Tak jak wspomniałem na wstępie, HStore jest dobrym wstępem do poznania JSONB, znacznie bardziej rozbudowanego i oferującego znacznie szerszy zakres możliwości, ale o tym w kolejnym artykule.

Jeśli interesuje Ciebie ta tematyka, koniecznie zapisz się do mojej listy mailowej, właśnie rusza cały pakiet ciekawych materiałów w tej tematyce.

Więcej przykładów zastosowania znajdziesz tutaj. Uwagi, pytania, sugestie? Zostaw komentarz lub skorzystaj z formularza.

Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments