Zakładając, że mówisz o rzeczywistym, ścisłym formacie JSON (bez dziwactw, takich jak niecytowane klucze)...
json
nie różni się zbytnio od text
. Niewiele robi poza walidacją JSON .
jsonb
to inna bestia w porównaniu do tych dwóch:jest to w pełni rozwinięta struktura danych z własnym wewnętrznym formatem, który ma znacznie więcej dostępnych operacji wyszukiwania. Na przykład json
nie ma odpowiedniego =
(operator równości). jsonb
ma. (text
ma też, mimo że jest semantycznie inny).
Znacznie rozsądniej jest indeksować, ale podczas odczytów i zapisów należy je przekształcać w tę i z powrotem.
Biorąc to pod uwagę, jsonb
nie wygląda tutaj na dobry wybór.
... Pozostała więc tylko jedna decyzja:
Czy chcesz mieć pewność, że Twoja baza danych zawiera tylko prawidłowe wartości JSON w Twojej kolumnie? Na poziomie bazy danych? A może ufasz każdemu klientowi tej bazy danych (zazwyczaj aplikacjom serwerowym), że dostarcza tylko prawidłowe dane?
json
jest stosunkowo bezpiecznym wyborem. Używanie text
teoretycznie może poprawić wydajność o znikomy margines ze względu na brak walidacji, ale uzyskasz tylko określone wyniki w testach porównawczych. Ale nie będzie miał takiego zabezpieczenia przed wartościami innymi niż JSON, a przypadkowy błąd w kliencie może pozostać niezauważony. Testuj odpowiedzialnie!