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