Първо, 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
отнема повече време за изграждане от входното си представяне, отколкотоjson
json
операции отнемат значително повече време отjsonb
(&синтактичният анализ също трябва да се извършва всеки път, когато извършвате някаква операция вjson
въведена стойност)
Когато jsonb
ще бъде наличен със стабилна версия, ще има два основни случая на употреба, когато можете лесно да избирате между тях:
- Ако работите само с JSON представянето във вашето приложение, PostgreSQL се използва само за съхраняване и извличане на това представяне, трябва да използвате
json
. - Ако извършвате много операции върху стойността на JSON в PostgreSQL или използвате индексиране в някое JSON поле, трябва да използвате
jsonb
.