BUG #16636: Upper case issue in JSONB type
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
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
clarificationError 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
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
clarificationError 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 workingThe 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
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
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