Обсуждение: Create array of data from JSONB in PG 9.5
Hi,
I wrote the below SQL which works and give me what I want, but it doesn’t work in 9.5 version. I wrote this query in PG
10.I want to change it so that I can run it on 9.5 as production using 9.5 version. I need help on this.
SELECT DISTINCT
ARRAY [jsonb_array_elements(data) ->> 'group', jsonb_array_elements(jsonb_array_elements(data) -> 'properties') ->>
'name']
FROM
"vessels"
WHERE
"vessels"."deleted_at" IS NULL
AND "vessels"."company_id" = '7d105acd-be5a-4225-a2db-b549105e4172';
When I ran the same query to production I get error:
ERROR: set-valued function called in context that cannot accept a set
Thanks,
Arup Rakshit
ar@zeit.io
On 11/15/19 2:01 AM, Arup Rakshit wrote: > Hi, > > I wrote the below SQL which works and give me what I want, but it doesn’t work in 9.5 version. I wrote this query in PG10. I want to change it so that I can run it on 9.5 as production using 9.5 version. I need help on this. > > SELECT DISTINCT > ARRAY [jsonb_array_elements(data) ->> 'group', jsonb_array_elements(jsonb_array_elements(data) -> 'properties') ->>'name'] > FROM > "vessels" > WHERE > "vessels"."deleted_at" IS NULL > AND "vessels"."company_id" = '7d105acd-be5a-4225-a2db-b549105e4172'; > > > When I ran the same query to production I get error: > > ERROR: set-valued function called in context that cannot accept a set I would break this down into smaller units to see what is actually triggering the above ERROR. In other words run the jsonb_array_elements() independently and then start adding them together. > > > Thanks, > > Arup Rakshit > ar@zeit.io > > > > > > -- Adrian Klaver adrian.klaver@aklaver.com
Arup Rakshit <ar@zeit.io> writes:
> I wrote the below SQL which works and give me what I want, but it doesn’t work in 9.5 version. I wrote this query in
PG10. I want to change it so that I can run it on 9.5 as production using 9.5 version. I need help on this.
> SELECT DISTINCT
> ARRAY [jsonb_array_elements(data) ->> 'group', jsonb_array_elements(jsonb_array_elements(data) -> 'properties')
->>'name']
> FROM
> "vessels"
> WHERE
> "vessels"."deleted_at" IS NULL
> AND "vessels"."company_id" = '7d105acd-be5a-4225-a2db-b549105e4172';
> When I ran the same query to production I get error:
> ERROR: set-valued function called in context that cannot accept a set
IIRC, you can't nest calls of set-returning functions before about v10.
One workaround is to put the inner set-returning function call into a
sub-select.
regards, tom lane