Tout d'abord, hstore est un module contrib, qui vous permet uniquement de stocker des paires clé => valeur, où les clés et les valeurs ne peuvent être que du text s (toutefois les valeurs peuvent être sql NULL s aussi).
Les deux json &jsonb vous permet de stocker une valeur JSON valide (défini dans sa spécification).
F. ex. ce sont des représentations JSON valides :null , true , [1,false,"string",{"foo":"bar"}] , {"foo":"bar","baz":[null]} - hstore n'est qu'un petit sous-ensemble par rapport à ce que JSON est capable (mais si vous n'avez besoin que de ce sous-ensemble, ça va).
La seule différence entre json &jsonb est leur stockage :
jsonest stocké dans son format de texte brut, tandis quejsonbest stocké dans une représentation binaire
Il y a 3 conséquences majeures à cela :
jsonbprend généralement plus d'espace disque pour stocker quejson(parfois pas)jsonbprend plus de temps à construire à partir de sa représentation d'entrée quejsonjsonles opérations prennent considérablement plus de temps quejsonb(&l'analyse doit également être effectuée chaque fois que vous effectuez une opération sur unjsonvaleur saisie)
Quand jsonb sera disponible avec une version stable, il y aura deux cas d'utilisation majeurs, où vous pourrez facilement choisir entre eux :
- Si vous travaillez uniquement avec la représentation JSON dans votre application, PostgreSQL n'est utilisé que pour stocker et récupérer cette représentation, vous devez utiliser
json. - Si vous effectuez de nombreuses opérations sur la valeur JSON dans PostgreSQL, ou utilisez l'indexation sur un champ JSON, vous devez utiliser
jsonb.