On 02/25/2014 09:45 AM, Bruce Momjian wrote:
>> It hurts our adoption substantially to confuse developers.  We need to
>> recommend one type over the other, hence "Use jsonb unless you need X".
>>  Merlin is pushing the type of multivariable comparison where *I*
>> wouldn't be able to make sense of which one I should pick, let alone
>> some web developer who's just trying to get a site built.  That sort of
>> thing *really* doesn't help our users.
> 
> I agree it would be nice to have something simple, like "Use JSON if you
> wish to just store/retrieve entire JSON structures, and JSONB if you
> wish to do any kind of lookup or manipulation of JSON values on the
> server".

(to clarify below: "json" refers to the current varlena datatype; JSON
refers to JSON serialized data).

I don't think that's decisive enough, which is why I wrote the doc the
way I did.  The problem is that most users would prefer that we tell
them which one to use, which is why I want to structure the doc as "Use
jsonb unless you need one of these things", or more specifically:

    In general, most applications will find it advantageous to store
JSON data
    as <type>jsonb</type>, as jsonb is more efficient when using JSON
manipulation functions, and will
    support future advanced json index, operator and search features. The
    <type>json</type> will primarily be useful for applications which
need to
    preserve exact formatting of the input JSON, or users with existing
    <type>json</type> columns which they do not want to convert to
    <type>jsonb</type>.

Part of my reason for wanting to recommend jsonb over json is in the
context of the third storage option for JSON, namely TEXT.  The only
things which distinguish json from TEXT for JSON storage are validation
and a set of json manipulation functions.  jsonb works with the
manipulation functions better/faster, causing the old json type to start
looking like more of a DOMAIN over TEXT than a real type comparatively.
 In other words, if you ask the question "Why would I want to use json
instead of either jsonb or TEXT", the answer becomes quite narrow.

Possibly I should expand the little chart and add a column for TEXT?
It's a viable option for storing JSON data, especially if you store a
lot of broken JSON or fragments.

-- 
Josh Berkus
PostgreSQL Experts Inc.
http://pgexperts.com


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to