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!