Задать вопрос
@firstmixon

Есть ли способ логировать работу процедуры?

День добрый, есть процедура выполняющая последовательно 10 действий(условно), работает процедура продолжительное время, была идея писать из процедуры в спец таблицу текущий статус, но как показала практика, процедура работает в транзакции по умолчанию, и все данные что я вставляю в лог таблицу, вываливаются только в конце.

Вопрос есть ли способ выкидывать из процедуры текущий статус?

Заранее спасибо.
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Melkij
@Melkij
DBA для вашего PostgreSQL?
какой-нибудь raise используется обычно https://www.postgresql.org/docs/current/plpgsql-er...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@nea14
Чтобы узнать значение скалярной переменной:
raise notice 'Моя переменная var1 = %, а var2 = %', var1, var2;

Чтобы узнать, что было в какой-нибудь промежуточной таблице, можно использовать refcursor'ы:
declare
    ...
    cur1 refcursor := 'unique_name1';  -- Создали переменную типа refcursor
...
open cur1 for
    select ...;  -- Привязываем курсор к запросу, который хотим проследить

тогда снаружи функцию/процедуру можно будет вызывать так:
begin transaction;
select public.my_func1();  -- для функции
call public.my_proc1;  -- или для процедуры
fetch all from "unique_name1";   -- выведет таблицу по этому курсору. Имя в двойных, а не одинарных кавычках.
commit transaction;  -- достать данные можно пока транзакция не закончилась, поэтому здесь явно оборачиваем всё в транзакцию
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы