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.
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.