Najpierw hstore to moduł contrib, który pozwala tylko na przechowywanie par klucz => wartości, gdzie klucze i wartości mogą być tylko text s (jednak wartości mogą być sql NULL s też).
Oba json &jsonb umożliwia przechowywanie prawidłowej wartości JSON (zdefiniowane w specyfikacji).
Np. są to poprawne reprezentacje JSON:null , true , [1,false,"string",{"foo":"bar"}] , {"foo":"bar","baz":[null]} - hstore to tylko mały podzbiór w porównaniu do możliwości JSON (ale jeśli potrzebujesz tylko tego podzbioru, jest w porządku).
Jedyna różnica między json &jsonb jest ich przechowywanie:
jsonjest przechowywany w formacie zwykłego tekstu, podczas gdyjsonbjest przechowywany w postaci binarnej
Są to 3 główne konsekwencje:
jsonbzwykle zajmuje więcej miejsca na dysku do przechowywania niżjson(czasami nie)jsonbkompilacja z jego reprezentacji wejściowej zajmuje więcej czasu niżjsonjsonoperacje zajmują znacznie więcej czasu niżjsonb(&parsowanie musi być również wykonywane za każdym razem, gdy wykonujesz jakąś operację najsonwpisana wartość)
Kiedy jsonb będzie dostępny w wersji stabilnej, będą dwa główne przypadki użycia, w których będzie można łatwo wybierać między nimi:
- Jeśli pracujesz tylko z reprezentacją JSON w swojej aplikacji, PostgreSQL jest używany tylko do przechowywania i pobierania tej reprezentacji, powinieneś użyć
json. - Jeśli wykonujesz wiele operacji na wartości JSON w PostgreSQL lub używasz indeksowania na jakimś polu JSON, powinieneś użyć
jsonb.