Hstore w PostgreSQL to jeden z pierwszych nieustrukturyzowanych typów danych obsługiwanych przez tą bazę danych (od wersji 8.3). Ułatwia przechowywanie pary: klucz-wartość i uzyskiwanie do nich dostępu w bazie danych. Pod względem funkcjonalności hstore jest dobrym rozwiązaniem, ale nieco mniej optymalnym niż JSON, ponieważ hstore w Postgres pozwala na przechowywania jedynie ciągu znaków i nie umożliwia zagnieżdżania. Typ danych hstore jest bardzo przydatny w wielu przypadkach, takich jak dane częściowo ustrukturyzowane lub wiersze z wieloma atrybutami, o które rzadko wykonuje się zapytania.
To co na początku musimy zrobić aby móc korzystać z typu danych hstore w PostgreSQL, to włączyć rozszerzenie hstore:
Hstore przechowuje parę: klucz i wartość, w której musimy dodać podwójny cudzysłów wokół pól: klucza i wartości w następujący sposób:
Przykład 1
Aby lepiej zrozumieć zastosowanie typu danych hstore, tworzymy tabelę o nazwie „pracownik” zawierającą typ danych hstore:
Kolumna datatype (typ danych hstore) będzie zawierała dane pracownika, takie jak: stanowisko, wynagrodzenie i numer telefonu. Wstawiamy dane do tabeli pracownik:
Dodajemy również dane kolejnego pracownika:
Nasza tabela wygląda w następujący sposób:
Przykład 2
Pobieranie danych typu hstore za pomocą zapytania:
Jako wynik otrzymujemy:
a) Pobieranie danych dla określonego klucza hstore:Aby pobrać konkretny klucz z kolumny typu hstore, możemy użyć operatora strzałki (->) w następujący sposób:
Jako wynik zapytania otrzymujemy:
b) Użycie klauzuli WHERE z parą klucz:wartość:
Jako wynik otrzymujemy:
UPDATE
Ponieważ w jednym polu możemy mieć wiele wartości, opcja aktualizacji pól hstore Postgres wymaga więcej pracy. Nie zawsze chcemy aktualizować całe pole a jedynie jego część.
Przykład 3
Dodanie kolejnej pary klucz – wartość do istniejącego już wiersza:
Aby dodać kolejną parę klucz-wartość do istniejącego pola hstore w Postgres, możemy użyć operatora || który służy konkatenacji w stringach, a następnie operatora :: do konwersji wyniku na typ hstore.
Wynik:
Modyfikacja pary klucz – wartość w istniejącym wierszu:
Wynik:
DELETE
Przykład 4
Usunięcie pary klucz – wartość:
Wynik:
Zapytania
Zapytanie o wartość określonego klucza – operator ->
Wynik:
Sprawdzenie czy podany klucz istnieje w polu hstore – operator ?
Jeżeli podany klucz istnieje wiersze zostaną wyświetlone:
Użycie funkcji PostgreSQL
Funkcja akeys() pozwala nam pobrać wszystkie klucze przechowywane w kolumnie typu hstore:
Wynik:
Funkcja skeys() pozwala nam pobrać wszystkie klucze przechowywane w kolumnie typu hstore jako zestaw:
Inne funkcje, których możemy użyć to np.: avals() – pozwala na pobranie samych wartości;svals() – pozwala na pobranie samych wartości w formie zestawu;
Zapraszamy na szkolenia PostgreSQLDokumentacja PostgreSQL