Загрузка данных


DO $test40$
DECLARE
    v_body text;
    v_pattern text :=
        '(\mfrom[[:space:]]+report\.conf_scheduler_sfr'
        '[[:space:]]+where[[:space:]]+is_active'
        '[[:space:]]*=[[:space:]]*true\M)';
    v_matches integer;
BEGIN
    IF EXISTS (
        SELECT 1
        FROM report.fns_reference_request_journal
        WHERE created_at >= current_date + time '16:30'
          AND contract_id IN (13644952, 13687399, 13687807)
    ) THEN
        RAISE EXCEPTION
            'После 16:30 уже есть новые записи по тестовым договорам. Повторное формирование остановлено.';
    END IF;

    SELECT p.prosrc
    INTO STRICT v_body
    FROM pg_proc p
    WHERE p.oid = 'smev.f3_create_sfr_register()'::regprocedure;

    SELECT count(*)
    INTO v_matches
    FROM regexp_matches(v_body, v_pattern, 'gi');

    IF v_matches <> 1 THEN
        RAISE EXCEPTION
            'Не удалось однозначно выделить отбор настроек: найдено %. Запуск отменён.',
            v_matches;
    END IF;

    v_body := regexp_replace(
        v_body,
        v_pattern,
        '\1 AND id = 40',
        'gi'
    );

    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 'TEST40: начало формирования только №40';

    EXECUTE format('DO %L;', v_body);

    RAISE NOTICE 'TEST40: вызов завершён; результат проверяем по выводу и журналу';
END;
$test40$;