Re: JSON_SERIALIZE for JSONB returns parts of the internal JSONB representation - Mailing list pgsql-bugs

From shihao zhong
Subject Re: JSON_SERIALIZE for JSONB returns parts of the internal JSONB representation
Date
Msg-id CAGRkXqQXwh_gJmQE3PZj0v13omMPgFGBbb8TJoBFH8ECsAFCUg@mail.gmail.com
Whole thread
In response to JSON_SERIALIZE for JSONB returns parts of the internal JSONB representation  (Dirkjan Bussink <d.bussink@gmail.com>)
List pgsql-bugs
Hi Dirkjan,

Thanks for reporting this issue.

> select JSON_SERIALIZE('[1,2,4]'::jsonb);
>  \x03

Reproduced on master. The docs allow any JSON type here, so it should
work. makeJsonConstructorExpr() builds the output coercion for a json
input, because it looks at the RETURNING format, which is always JSON.
The jsonb argument is passed through as is, so json_out() runs on it.

0001 fixes this issue.
0002 adds tests and is optional. 

The fix is in the parser, so a view created before it stays wrong until
recreated.

Other options I looked at:

- convert in the executor. Covers old views, but adds a step there and
  keeps the wrong coercion in the tree.
- cast jsonb to json in transformJsonSerializeExpr(). Works, converts
  twice.

Thanks,
Shihao




Attachment

pgsql-bugs by date:

Previous
From: shihao zhong
Date:
Subject: Re: bug: Gather rescan keeps the first scan's tuple bound in workers
Next
From: shihao zhong
Date:
Subject: Re: BUG #19693: JSON_VALUE/JSON_QUERY PASSING a toasted text value reads the toast pointer instead of the text