From: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
---|---|
To: | Thom Brown <thom(at)linux(dot)com> |
Cc: | Dmitry Dolgov <9erthalion6(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: GSoC 2015: Extra Jsonb functionality |
Date: | 2015-03-19 14:35:05 |
Message-ID: | 20150319143505.GF3636@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Thom Brown wrote:
> On 19 March 2015 at 14:12, Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> wrote:
> > Dmitry Dolgov wrote:
> >
> >> * jsonb_slice - extract a subset of an jsonb
> >> Example of usage:
> >>
> >> =# jsonb_slice('{"a": 1, "b": {"c": 2}, "d": {"f": 3}}'::jsonb,
> >> ARRAY['b', 'f', 'x']);
> >>
> >> jsonb_slice
> >> ---------------------------
> >> {"b": {"c": 2}, "f": 3}
> >
> > This is a bit strange. Why did "f" get flattened out of "d"? Is the
> > resulting document still valid for the purposes of an application using
> > it? I think I'd expect the result to be {"b": {"c": 2}, "d": {"f": 3}}
>
> Why would "d" be output when it wasn't in the requested slice?
Because it contains "f".
> Although I'm still a bit confused about "f" being produced.
I guess you could say that the second argument is an array of element
paths, not key names. So to get the result I suggest, you would have to
use ARRAY['{b}', '{d,f}', '{x}']. (Hm, this is a non-rectangular
array actually... I guess I'd go for ARRAY['b', 'd//f', 'x'] instead, or
whatever the convention is to specify a json path).
--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2015-03-19 14:49:09 | Re: assessing parallel-safety |
Previous Message | Andres Freund | 2015-03-19 14:33:54 | Re: ERRCODE_T_R_DEADLOCK_DETECTED |