Supponendo che tu stia parlando di un JSON reale e rigoroso (senza stranezze come chiavi senza virgolette)...
json
non è troppo diverso da text
. Non fa molto a parte convalidare JSON .
jsonb
è una bestia diversa rispetto a queste due:è una struttura dati a tutti gli effetti con un proprio formato interno che ha molte più operazioni disponibili nelle ricerche. Ad esempio json
non ha =
applicabile (operatore di uguaglianza). jsonb
ha. (text
ha anche, anche se semanticamente diverso.)
È molto più sensato da indicizzare, ma deve essere trasformato avanti e indietro durante le letture e le scritture.
Detto questo, jsonb
non sembra una buona scelta qui.
... Quindi resta solo una decisione da prendere:
Vuoi assicurarti che il tuo database contenga solo valori JSON validi nella tua colonna? A livello di database? Oppure ti fidi che ogni client di quel database (app server, in genere) fornisca solo dati validi?
json
è una scelta relativamente sicura in entrambi i casi. Usando text
potrebbe teoricamente migliorare le prestazioni di un margine trascurabile a causa dell'assenza di convalida, ma otterrai solo numeri specifici dal benchmarking. Ma non avrà quella protezione contro i valori non JSON e un bug accidentale nel client potrebbe passare inosservato. Testare responsabilmente!