BUG #16636: Upper case issue in JSONB type

Started by PG Bug reporting formover 5 years ago5 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 16636
Logged by: ChandraKumar Ovanan
Email address: osaimar19@gmail.com
PostgreSQL version: 11.0
Operating system: Windows 10
Description:

Hi All,
Below example which I was execute query in postgres.
The problem statement here, when I use upper case function by converting
JSONB object has Null value,
Then I getting below error.
Please could fix it defect or why this behavior on postures,required
clarification

Error message:
SQL Error [22P02]: ERROR: invalid input syntax for type json
Detail: Token "NULL" is invalid.
Where: JSON data, line 1: ...E": "2018-01-10", "NAME": "TEST3"}, {"DATE":
NULL...

CREATE TABLE logs(id serial, data JSONB);
INSERT INTO logs VALUES
(1,
'[{"name":"test1","date":"2020-11-11"},{"name":"test2","date":"2018-01-10"}]'),
(2,
'[{"name":"test3","date":"2020-05-18"},{"name":"test4","date":"null"}]');

SELECT * FROM logs WHERE data @> '[{"date":null}]';
SELECT * FROM logs WHERE data @> '[{"date":"2018-01-10"}]';
SELECT * FROM logs WHERE data @> '[{"date":"2018-01-11"}]';
SELECT * FROM logs WHERE data @> '[{"name":"test4"}]';
SELECT * FROM logs WHERE lower(data::text)::jsonb @>
lower('[{"date":"2018-01-10"}]')::jsonb ; --working
SELECT * FROM logs WHERE upper(data::text)::jsonb @>
upper('[{"date":"2018-01-10"}]')::jsonb ; --Not working

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: PG Bug reporting form (#1)
Re: BUG #16636: Upper case issue in JSONB type

On Fri, Sep 25, 2020 at 8:13 AM PG Bug reporting form <
noreply@postgresql.org> wrote:

The following bug has been logged on the website:

Bug reference: 16636
Logged by: ChandraKumar Ovanan
Email address: osaimar19@gmail.com
PostgreSQL version: 11.0
Operating system: Windows 10
Description:

Hi All,
Below example which I was execute query in postgres.
The problem statement here, when I use upper case function by converting
JSONB object has Null value,
Then I getting below error.
Please could fix it defect or why this behavior on postures,required
clarification

Error message:
SQL Error [22P02]: ERROR: invalid input syntax for type json
Detail: Token "NULL" is invalid.
Where: JSON data, line 1: ...E": "2018-01-10", "NAME": "TEST3"}, {"DATE":
NULL...

CREATE TABLE logs(id serial, data JSONB);
INSERT INTO logs VALUES
(1,

'[{"name":"test1","date":"2020-11-11"},{"name":"test2","date":"2018-01-10"}]'),
(2,
'[{"name":"test3","date":"2020-05-18"},{"name":"test4","date":"null"}]');

SELECT * FROM logs WHERE data @> '[{"date":null}]';
SELECT * FROM logs WHERE upper(data::text)::jsonb @>
upper('[{"date":"2018-01-10"}]')::jsonb ; --Not working

The error and the example queries don't seem to match...

When you upper('{"date":null}'::text) you get the literal text:
{"date":NULL}, which is not valid json; a JSON null "value" must be written
in lowercase. You would find the same problem had you chosen a boolean
field and written true/false as documented on the json data type page [1],
Table 8.23, and the json standard [2]

David J.

1. https://www.postgresql.org/docs/13/datatype-json.html
2. https://www.json.org/json-en.html

#3ChandraKumar Ovanan
osaimar19@gmail.com
In reply to: David G. Johnston (#2)
Re: BUG #16636: Upper case issue in JSONB type

Hello David,

Thanks a lot, you cleared my question.and it seems fine to me.

You mention boolean type, also the same problem but the document is more
clearled. 🙂

*Just a suggestion: *
The JSON primitive type is null, The document is not cleared such as
lowercase or uppercase.

Please update the document

[image: pql table.PNG]

Regards
Chandrakumar

On Fri, Sep 25, 2020 at 9:08 PM David G. Johnston <
david.g.johnston@gmail.com> wrote:

On Fri, Sep 25, 2020 at 8:13 AM PG Bug reporting form <

noreply@postgresql.org> wrote:

The following bug has been logged on the website:

Bug reference: 16636
Logged by: ChandraKumar Ovanan
Email address: osaimar19@gmail.com
PostgreSQL version: 11.0
Operating system: Windows 10
Description:

Hi All,
Below example which I was execute query in postgres.
The problem statement here, when I use upper case function by converting
JSONB object has Null value,
Then I getting below error.
Please could fix it defect or why this behavior on postures,required
clarification

Error message:
SQL Error [22P02]: ERROR: invalid input syntax for type json
Detail: Token "NULL" is invalid.
Where: JSON data, line 1: ...E": "2018-01-10", "NAME": "TEST3"},

{"DATE":

NULL...

CREATE TABLE logs(id serial, data JSONB);
INSERT INTO logs VALUES
(1,

'[{"name":"test1","date":"2020-11-11"},{"name":"test2","date":"2018-01-10"}]'),

(2,
'[{"name":"test3","date":"2020-05-18"},{"name":"test4","date":"null"}]');

SELECT * FROM logs WHERE data @> '[{"date":null}]';
SELECT * FROM logs WHERE upper(data::text)::jsonb @>
upper('[{"date":"2018-01-10"}]')::jsonb ; --Not working

The error and the example queries don't seem to match...

When you upper('{"date":null}'::text) you get the literal text:

{"date":NULL}, which is not valid json; a JSON null "value" must be written
in lowercase. You would find the same problem had you chosen a boolean
field and written true/false as documented on the json data type page [1],
Table 8.23, and the json standard [2]

David J.

1. https://www.postgresql.org/docs/13/datatype-json.html
2. https://www.json.org/json-en.html

--
Thanks & Regards,
Chandra Kumar O
07639078641

Attachments:

pql table.PNGimage/png; name="pql table.PNG"Download+0-1
#4David G. Johnston
david.g.johnston@gmail.com
In reply to: ChandraKumar Ovanan (#3)
Re: BUG #16636: Upper case issue in JSONB type

On Fri, Sep 25, 2020 at 11:25 PM ChandraKumar Ovanan <osaimar19@gmail.com>
wrote:

Hello David,

Thanks a lot, you cleared my question.and it seems fine to me.

You mention boolean type, also the same problem but the document is more
clearled. 🙂

*Just a suggestion: *
The JSON primitive type is null, The document is not cleared such as
lowercase or uppercase.

Please update the document

[image: pql table.PNG]

FWIW, I've proposed a patch [1]/messages/by-id/CAHyU1EYRYCV8gELrBYm6V8E+Toqf=KQe370bPt4yrE_Y1yDZ9w@mail.gmail.com but I'm 70-30 whether to cover this
material as our documentation doesn't intend to document what is already
covered in the RFC and the idea that the value of the null type is spelled
(null) is part of the standard. We document the boolean part because in
PostgreSQL inputs for booleans are considerably more liberal. That all
said it doesn't eat up much space and was easy enough to do without being
annoying (IMO) so I did it.

David J.

[1]: /messages/by-id/CAHyU1EYRYCV8gELrBYm6V8E+Toqf=KQe370bPt4yrE_Y1yDZ9w@mail.gmail.com
/messages/by-id/CAHyU1EYRYCV8gELrBYm6V8E+Toqf=KQe370bPt4yrE_Y1yDZ9w@mail.gmail.com

Attachments:

pql table.PNGimage/png; name="pql table.PNG"Download+0-1
#5ChandraKumar Ovanan
osaimar19@gmail.com
In reply to: David G. Johnston (#4)
Re: BUG #16636: Upper case issue in JSONB type

Ok, thanks.

On Wed 30 Sep, 2020, 8:27 AM David G. Johnston, <david.g.johnston@gmail.com>
wrote:

Show quoted text

On Fri, Sep 25, 2020 at 11:25 PM ChandraKumar Ovanan <osaimar19@gmail.com>
wrote:

Hello David,

Thanks a lot, you cleared my question.and it seems fine to me.

You mention boolean type, also the same problem but the document is more
clearled. 🙂

*Just a suggestion: *
The JSON primitive type is null, The document is not cleared such as
lowercase or uppercase.

Please update the document

[image: pql table.PNG]

FWIW, I've proposed a patch [1] but I'm 70-30 whether to cover this
material as our documentation doesn't intend to document what is already
covered in the RFC and the idea that the value of the null type is spelled
(null) is part of the standard. We document the boolean part because in
PostgreSQL inputs for booleans are considerably more liberal. That all
said it doesn't eat up much space and was easy enough to do without being
annoying (IMO) so I did it.

David J.

[1]
/messages/by-id/CAHyU1EYRYCV8gELrBYm6V8E+Toqf=KQe370bPt4yrE_Y1yDZ9w@mail.gmail.com

Attachments:

pql table.PNGimage/png; name="pql table.PNG"Download+0-1