DO $export40$
DECLARE
v_body text;
v_pattern text :=
'(\mwhere[[:space:]]+is_active'
'[[:space:]]*=[[:space:]]*true\M)';
v_matches integer;
v_count integer;
BEGIN
SELECT count(*)
INTO v_count
FROM report.fns_reference_request_journal
WHERE smevregisterid IN (14695214, 14695215, 14695216)
AND model_file_to_verification_id IN (8009, 8010, 8011)
AND is_sent_to_fns = false
AND created_at >= now() - interval '1 day';
IF v_count <> 3 THEN
RAISE EXCEPTION
'Ожидались три неотправленные записи, найдено %. Запуск отменён.',
v_count;
END IF;
IF EXISTS (
SELECT 1
FROM report.fns_reference_request_journal
WHERE created_at >= now() - interval '1 day'
AND is_sent_to_fns = false
AND model_file_to_verification_id IS NOT NULL
AND model_file_to_verification_id NOT IN (8009, 8010, 8011)
) THEN
RAISE EXCEPTION
'В отборе есть другие неотправленные файлы. Запуск отменён.';
END IF;
IF EXISTS (
SELECT 1
FROM mtrustgate.moutlist
WHERE mftv_id IN (8009, 8010, 8011)
) THEN
RAISE EXCEPTION
'Для тестовых файлов уже есть записи выгрузки. Повторный запуск отменён.';
END IF;
SELECT p.prosrc
INTO STRICT v_body
FROM pg_proc p
WHERE p.oid = 'smev.f3_send_register_to_sfr()'::regprocedure;
SELECT count(*)
INTO v_matches
FROM regexp_matches(v_body, v_pattern, 'gi');
IF v_matches <> 2 THEN
RAISE EXCEPTION
'Структура функции отличается от ожидаемой: найдено % условий активности вместо двух. Запуск отменён.',
v_matches;
END IF;
v_body := regexp_replace(
v_body,
v_pattern,
'\1 AND id = 40',
'gi'
);
v_body := regexp_replace(
v_body,
'\mperform[[:space:]]+mail\.api_new_message_group'
'[[:space:]]*\([^;]*\)[[:space:]]*;',
'NULL;',
'gi'
);
IF v_body ~* 'mail[[:space:]]*\.[[:space:]]*api_new_message_group' THEN
RAISE EXCEPTION
'Не удалось исключить почтовые уведомления. Запуск отменён.';
END IF;
IF v_body !~* '\mreturn[[:space:]]+0[[:space:]]*;' THEN
RAISE EXCEPTION
'Структура возврата функции отличается от ожидаемой. Запуск отменён.';
END IF;
v_body := regexp_replace(
v_body,
'\mreturn[[:space:]]+0[[:space:]]*;',
'RETURN;',
'gi'
);
RAISE NOTICE 'EXPORT40: начало выгрузки файлов 8009, 8010, 8011';
EXECUTE format('DO %L;', v_body);
RAISE NOTICE 'EXPORT40: вызов завершён; проверяем Output и папку выгрузки';
END;
$export40$;