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!