Ervan uitgaande dat je het hebt over echte, strikte JSON (zonder eigenaardigheden zoals niet-geciteerde sleutels)...
json is niet veel anders dan text . Het doet niet veel behalve JSON valideren .
jsonb is een ander beest vergeleken met deze twee:het is een volwaardige gegevensstructuur met een eigen intern formaat dat veel meer bewerkingen beschikbaar heeft in zoekopdrachten. Bijvoorbeeld json heeft geen van toepassing = (gelijkheidsoperator). jsonb heeft. (text heeft ook, ook al is het semantisch anders.)
Het is veel verstandiger om te indexeren, maar het moet tijdens het lezen en schrijven heen en weer worden getransformeerd.
Gezien het feit dat jsonb lijkt hier geen goede keuze.
... Er hoeft dus nog maar één beslissing te worden genomen:
Wilt u ervoor zorgen dat uw database alleen geldige JSON-waarden in uw kolom bevat? Op databaseniveau? Of vertrouwt u erop dat elke client van die database (meestal server-apps) alleen geldige gegevens levert?
json is hoe dan ook een relatief veilige keuze. text gebruiken zou theoretisch de prestaties met een verwaarloosbare marge kunnen verbeteren vanwege het ontbreken van validatie, maar u krijgt alleen specifieke cijfers door benchmarking. Maar het zou die beveiliging niet hebben tegen niet-JSON-waarden, en een onbedoelde bug in de client zou onopgemerkt kunnen blijven. Test verantwoord!