Я пытаюсь создать функцию тестирования, которую я буду интегрировать с кругом CI.Идея состоит в том, чтобы создать 1 основную тестовую функцию, которая будет выполнять ряд базовых функций с параметром и показывать результат, который был пройден, а какой отказал.
В настоящее время у меня есть прототип функции, который вызывает 3 функции и тестирует их.Согласно моей логике, я вижу, что результат прошел / не прошел, если основная функция не возвращает никаких данных.Но когда есть синтаксическая ошибка в базовых функциях, она просто показывает, какая ошибка в соответствии с моей логикой, потому что я перехватываю исключение, но не показывает, из какой функции произошла ошибка.
Вот мой прототип тестовой функции:
RETURNS table (function text, result text) AS $$
DECLARE cnt INTEGER;
BEGIN
return query
select 'org.fn_get_org_hierarchy_full'::text as function,
case when count(*) > 0 then 'pass'::text else 'fail'::text end as result
from org.fn_get_org_hierarchy_full(array['828a5368-c27b-4cf4-41bb-25eed0f50420'])
UNION
select 'assessment.fn_get_activity_summary'::text as function,
case when count(*) > 0 then 'pass'::text else 'fail'::text end as result
from assessment.fn_get_activity_summary('9144de83-e18e-9c8a-0051-b13eb4227d42', -- root_org_sk
ARRAY ['40b4ae2c-aec7-c27c-7a39-616055d8c174'],
ARRAY ['359f3a32-6ba5-a366-028a-df8c274f650c'],
array['ND'], -- learner_sk
ARRAY['ND'], -- status
Array['ND'],
ARRAY['ND'],
ARRAY['ND'],
'1900-01-01 00:00:00.000000',
'2999-01-01 00:00:00.000000',
10000,0,
array['ND']
)
UNION
select 'assessment.fn_get_activity_details'::text as function,
case when count(*) > 0 then 'pass'::text else 'fail'::text end as result
from assessment.fn_get_activity_details('9144de83-e18e-9c8a-0051-b13eb4227d42',
array['40b4ae2c-aec7-c27c-7a39-616055d8c174'],
array['359f3a32-6ba5-a366-028a-df8c274f650c'],
array['ND'], -- learner
array['c9f84884-348e-5388-6e5e-4321526410d0'],
array['ND'], -- assessment_sk
array['ND'], -- cls_term
array['ND'], -- cls_sys
array['ND'], -- assigned_item_status
array['assessment'], -- assignment_type_name
'1900-01-01 00:00:00.000', -- min_student_start_datetime
'2999-01-01 00:00:00.000', -- max_student_stop_datetime,
10000,0,
array['ND']
);
exception when others then
raise notice 'Function Failed';
raise notice '% % ', SQLERRM, SQLSTATE;
END $$ LANGUAGE plpgsql;
Я настроил его со всеми параметрами, необходимыми для функции функции.
Вот как я вижу вывод:

Если функция не возвращает данные, то перед ней возникает сбой, которыйчто я хочу.
Но если есть синтаксическая ошибка, я вижу вывод следующим образом: 
Есть ли способ показать вывод в точно таком же формате, как этотдаже если синтаксическая ошибка.Я имею в виду, я хочу увидеть сбой перед функцией, которая имеет синтаксическую ошибку.Я полагаю, мне понадобится какой-нибудь механизм try-catch для каждой части объединения, которая у меня есть.Как я могу лучше подойти к этому?Или есть способ сделать это в postgresql.