Först, hstore är en bidragsmodul, som endast låter dig lagra nyckel => värdepar, där nycklar och värden endast kan vara text s (värden kan dock vara sql NULL också).
Båda json &jsonb låter dig lagra ett giltigt JSON-värde (definierad i dess spec).
T.ex. dessa är giltiga JSON-representationer:null , true , [1,false,"string",{"foo":"bar"}] , {"foo":"bar","baz":[null]} - hstore är bara en liten delmängd jämfört med vad JSON kan (men om du bara behöver denna delmängd går det bra).
Den enda skillnaden mellan json &jsonb är deras lagring:
jsonlagras i dess oformaterade textformat, medanjsonblagras i någon binär representation
Det finns tre stora konsekvenser av detta:
jsonbtar vanligtvis mer diskutrymme att lagra änjson(ibland inte)jsonbtar mer tid att bygga från dess indatarepresentation änjsonjsonoperationer tar avsevärt mer tid änjsonb(&parsning måste också göras varje gång du gör någon operation på enjsoninskrivet värde)
När jsonb kommer att finnas tillgänglig med en stabil version, det kommer att finnas två stora användningsfall när du enkelt kan välja mellan dem:
- Om du bara arbetar med JSON-representationen i din applikation, används PostgreSQL endast för att lagra och hämta denna representation, du bör använda
json. - Om du gör många operationer på JSON-värdet i PostgreSQL, eller använder indexering på något JSON-fält, bör du använda
jsonb.