/* Faced with such a unfairness. I have a do block or function with error handling block. In case when error type is 42601 (syntax_error) I can't get correct error context. The error context contains information about do block or function itself, but not about last executed instruction. In the folowing example, if I remove error handling I will happily have such a message:
ERROR: subquery must return only one column LINE 1: SELECT (select id, val1 from aaa)
But in case when error handling presents I have only sad:
message_text = subquery must return only one column pg_exception_context = PL/pgSQL function inline_code_block line 9 at assignment pg_exception_detail =
Where information about "SELECT (select id, val1 from aaa)" hided?
Repro script: */
create temp table aaa (id int, val1 text);
do language plpgsql $$ declare error_message text; error_detailed_message text; error_context text; arr_test aaa[]; begin --arr_test = (select row(id, val1) from aaa); -- No error, correct call arr_test = (select id, val1 from aaa); -- Error 42601 syntax_error exception --when syntax_error then when others then get stacked diagnostics error_message = message_text ,error_context = pg_exception_context ,error_detailed_message = pg_exception_detail;
Currently GET STACKED DIAGNOSTICS doesn't publish a "internalquery" field from ErrorData structure. So you cannot to print it. Probably it should be short patch, but maybe long discussion how to take this feature.