On Mon, Oct 16, 2023 at 5:21 PM Nikita Malakhov <huku...@gmail.com> wrote: > > Hi! > > With the latest set of patches we encountered failure with the following > query: > > postgres@postgres=# SELECT JSON_QUERY(jsonpath '"aaa"', '$' RETURNING text); > server closed the connection unexpectedly > This probably means the server terminated abnormally > before or while processing the request. > The connection to the server was lost. Attempting reset: Failed. > The connection to the server was lost. Attempting reset: Failed. > Time: 11.165 ms > > A colleague of mine, Anton Melnikov, proposed the following changes which > slightly > alter coercion functions to process this kind of error correctly. > > Please check attached patch set.
Thanks for the patches. I think I understand patch 1. It makes each of JSON_{QUERY | VALUE | EXISTS}() use FORMAT JSON for the context item by default, which I think is the correct behavior. As for patch 2, maybe the executor part is fine, but I'm not so sure about the parser part. Could you please explain why you think the parser must check error-safety of the target type for allowing IO coercion for non-ERROR behaviors? Even if we consider that that's what should be done, it doesn't seem like a good idea for the parser to implement its own logic for determining error-safety. IOW, the parser should really be using some type cache API. I thought there might have been a flag in pg_proc (prosafe) or pg_type (typinsafe), but apparently there isn't. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com