PostgreSQL oferuje dwa typy przechowywania danych JSON: json
i jsonb
. Aby wdrożyć wydajne mechanizmy zapytań dla tych typów danych, PostgreSQL udostępnia również typ danych jsonpath opisany w Rozdziale 8.14.6 .
Te json
i jsonb
typy danych zaakceptować niemal identycznych zestawów wartości jako wejście. Główną praktyczną różnicą jest wydajność. Typ
json
danych przechowuje dokładną kopię tekstu wejściowego, którą funkcje przetwarzania muszą ponownie przeanalizować przy każdym wykonaniu; podczas gdy jsonb
dane są przechowywane w zdekomponowanym formacie binarnym, co sprawia, że wprowadzanie danych jest nieco wolniejsze z powodu dodatkowego obciążenia konwersji, ale znacznie szybsze w przetwarzaniu, ponieważ nie jest wymagane ponowne przetwarzanie. jsonb
obsługuje także indeksowanie, co może być znaczącą zaletą.
Ponieważ json
typ przechowuje dokładną kopię tekstu wejściowego, zachowa semantycznie nieznaczną spację między tokenami, a także porządek kluczy w obiektach JSON. Ponadto, jeśli obiekt JSON w obrębie wartości zawiera ten sam klucz więcej niż jeden raz, wszystkie pary klucz / wartość zostaną zachowane. (Funkcje przetwarzania traktują ostatnią wartość jako operacyjną.) Natomiast jsonb
nie zachowuje białych znaków, nie zachowuje kolejności kluczy obiektów i nie zachowuje duplikatów kluczy obiektów. Jeśli na wejściu podano duplikaty kluczy, zachowana zostanie tylko ostatnia wartość.
Ogólnie rzecz biorąc, większość aplikacji powinna preferować przechowywanie danych JSON jako
jsonb
, chyba że istnieją dość wyspecjalizowane potrzeby, takie jak wcześniejsze założenia dotyczące porządkowania kluczy obiektowych.
PostgreSQL pozwala na kodowanie tylko jednego zestawu znaków na bazę danych. Dlatego typy JSON nie mogą być sztywno zgodne ze specyfikacją JSON, chyba że kodowanie bazy danych to UTF8. Próby bezpośredniego włączenia znaków, których nie można przedstawić w kodowaniu bazy danych, zakończą się niepowodzeniem; i odwrotnie, znaki, które mogą być reprezentowane w kodowaniu bazy danych, ale nie w UTF8, będą dozwolone.