Re: BUG #8218: Error when querying an JSON data, 9.3beta - Mailing list pgsql-bugs

From Bruce Momjian
Subject Re: BUG #8218: Error when querying an JSON data, 9.3beta
Date
Msg-id 20140124030535.GB8993@momjian.us
Whole thread Raw
In response to Re: BUG #8218: Error when querying an JSON data, 9.3beta  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: BUG #8218: Error when querying an JSON data, 9.3beta
List pgsql-bugs
On Sun, Jun  9, 2013 at 01:24:26PM -0400, Tom Lane wrote:
> daniel.zlatev@gmail.com writes:
> > CREATE TABLE products (
> >     data JSON
> > );
> > INSERT INTO products(data) VALUES('{"id": 1, "name": "shoes", "in_stock": 5}');
> > INSERT INTO products(data) VALUES('[1,2,3,4,5]');
> > SELECT * FROM products WHERE (data->>'in_stock')::integer > 0
>
> > Output was:
> > [Err] ERROR: cannot extract field from a non-object
>
> > I can understand the reason behind this error(JSON array don't has fields),
> > but for me it is very logical postgres to exclude this row from the
> > returning set, rather to throw an error.
>
> Hm.  In principle we could allow ->> to return NULL rather than failing
> when there's no such field, but I'm not sure that would represent good
> language design.  However, this example definitely shows there are some
> holes in the current set of JSON manipulation functions.  The only way
> to avoid a failure here would be to write something like
>
>     WHERE (CASE WHEN json_has_field(data, 'in_stock') THEN
>            (data->>'in_stock')::integer ELSE NULL::integer END) > 0
>
> but there is no "json_has_field" test function, nor any nice way to
> build one from the provided functions.
>
> It's probably too late to address this for 9.3, but we ought to put it
> on the to-do list for 9.4.

Was this addressed for 9.4 because I don't see it?

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #8939: Cast to range type fails due to whitespaces in the text string
Next
From: Noah Misch
Date:
Subject: Re: PostgreSQL 6.2.5 Visual Studio Build does not pass the regression tests.