BUG #13972: jsonb_to_record cant map camelcase keys

Started by Nonameabout 10 years ago3 messagesbugs
Jump to latest
#1Noname
zn@dbml.dk

The following bug has been logged on the website:

Bug reference: 13972
Logged by: Jacob Zneider
Email address: zn@dbml.dk
PostgreSQL version: 9.4.5
Operating system: OS x 10.11.3
Description:

Try the following:

select * from json_to_record('{"aA":1,"bB":[1,2,3],"c":"bar"}') as x(aA int,
bB text, c text)

first two columns will be empty.

select * from json_to_record('{"aa":1,"bb":[1,2,3],"c":"bar"}') as x(aA int,
bB text, c text)

All columns are mapped.

select * from json_to_record('{"aa":1,"bb":[1,2,3],"c":"bar"}') as x(aa int,
bb text, c text)

All columns are mapped.

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

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: Noname (#1)
Re: BUG #13972: jsonb_to_record cant map camelcase keys

On Thu, Feb 18, 2016 at 6:12 AM, <zn@dbml.dk> wrote:

The following bug has been logged on the website:

Bug reference: 13972
Logged by: Jacob Zneider
Email address: zn@dbml.dk
PostgreSQL version: 9.4.5
Operating system: OS x 10.11.3
Description:

Try the following:

select * from json_to_record('{"aA":1,"bB":[1,2,3],"c":"bar"}') as x(aA
int,
bB text, c text)

first two columns will be empty.

select * from json_to_record('{"aa":1,"bb":[1,2,3],"c":"bar"}') as x(aA
int,
bB text, c text)

All columns are mapped.

select * from json_to_record('{"aa":1,"bb":[1,2,3],"c":"bar"}') as x(aa
int,
bb text, c text)


Working as intended.

​Unquoted identifiers in SQL are folded to lower case. There is no
difference between the "as x(...)" in your example. They all result in
(aa, bb, c)​. The fact that json_to_record attempts to match in a
case-sensitive manner is intentional.

David J.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noname (#1)
Re: BUG #13972: jsonb_to_record cant map camelcase keys

zn@dbml.dk writes:

Try the following:

select * from json_to_record('{"aA":1,"bB":[1,2,3],"c":"bar"}') as x(aA int,
bB text, c text)

first two columns will be empty.

You need to do it like this:

select * from json_to_record('{"aA":1,"bB":[1,2,3],"c":"bar"}') as x("aA" int,
"bB" text, c text);
aA | bB | c
----+---------+-----
1 | [1,2,3] | bar
(1 row)

Without the quotes, the SQL names aA etc are case-folded to aa etc.

regards, tom lane

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