Първо, hstore е модул contrib, който ви позволява само да съхранявате двойки ключ => стойности, където ключовете и стойностите могат да бъдат само text s (стойностите обаче могат да бъдат sql NULL и също).
И двата json &jsonb ви позволява да съхранявате валидна стойност в JSON (дефинирано в неговата спецификация).
F.ex. това са валидни JSON представяния:null , true , [1,false,"string",{"foo":"bar"}] , {"foo":"bar","baz":[null]} - hstore е само малко подмножество в сравнение с това, което JSON е способен (но ако имате нужда само от това подмножество, е добре).
Единствената разлика между json &jsonb е тяхното съхранение:
jsonсе съхранява в обикновен текстов формат, докатоjsonbсе съхранява в някакво двоично представяне
Има 3 основни последствия от това:
jsonbобикновено отнема повече дисково пространство за съхранение, отколкотоjson(понякога не)jsonbотнема повече време за изграждане от входното си представяне, отколкотоjsonjsonоперации отнемат значително повече време отjsonb(&синтактичният анализ също трябва да се извършва всеки път, когато извършвате някаква операция вjsonвъведена стойност)
Когато jsonb ще бъде наличен със стабилна версия, ще има два основни случая на употреба, когато можете лесно да избирате между тях:
- Ако работите само с JSON представянето във вашето приложение, PostgreSQL се използва само за съхраняване и извличане на това представяне, трябва да използвате
json. - Ако извършвате много операции върху стойността на JSON в PostgreSQL или използвате индексиране в някое JSON поле, трябва да използвате
jsonb.