PostgreSQL | Как выводить в консоль промежуточные результаты работы функции? — efim360.ru

PostgreSQL | Как выводить в консоль промежуточные результаты работы функции?

Как сделать подобие console.log() как в JavaScript?

В функциях PostgreSQL иногда полезно выводить промежуточные результаты в консоль, чтобы понимать как работает алгоритм функции.

Нужный нам оператор (команда) называется:

RAISE NOTICE

Команда RAISE предназначена для вывода сообщений и вызова ошибок. Она может быть написана в коротком виде.

Но в нашей задаче нужно дополнительно указывать УРОВЕНЬ.

УРОВЕНЬ задаёт уровень важности ошибки. Возможные значения: DEBUG, LOG, INFO, NOTICE, WARNING и EXCEPTION. По умолчанию используется EXCEPTION.

 

Давайте напишем самую простую функцию:

-- Использование RAISE NOTICE

-- в теле функции

 

CREATE OR REPLACE FUNCTION rn()

RETURNS void

LANGUAGE 'plpgsql'

AS

$$

DECLARE

myvar bigint := 0;

BEGIN

RAISE NOTICE 'myvar = %', myvar;

END;

$$;

 

-- Вызов функции

 

SELECT rn();

 

-- Удаление функции

 

DROP FUNCTION rn();

 

Как работает функция?

Наша простейшая функция написана на языке plpgsql.

Она ничего не принимает. Входных параметров нет.

Она ничего не возвращает. Ключевое слово RETURNS использует для этого значение void.

Теперь давайте вызовем нашу функцию и посмотрим на консольные сообщения.

Делать вызов мы будем в веб-интерфейсе pgAdmin 4.

Вывели в консоль промежуточный результат работы функции в PostgreSQL при помощи RAISE NOTICE
Вывели в консоль промежуточный результат работы функции в PostgreSQL при помощи RAISE NOTICE

 

На вкладке "Messages" можно рассмотреть пункт "ЗАМЕЧАНИЕ:". Справа от этой записи мы увидим нашу строку, где вместо знака процента будет стоять наше число ноль. Мы вывели именно то, что хотели узнать в процессе работы функции.

Чуть ниже мы также видим информационное сообщение, которое говорит нам о том, что  вызов выполнился УСПЕШНО.

 

Дополнение

Давайте добавим в нашу функцию немножко логики и каждый этап буем выводить в консоль.

CREATE OR REPLACE FUNCTION rn2()

RETURNS void

LANGUAGE 'plpgsql'

AS

$$

DECLARE

myvar bigint := 0;

BEGIN

myvar := myvar + 1; RAISE NOTICE '%', myvar;

myvar := myvar + 2; RAISE NOTICE '%', myvar;

myvar := myvar + 3; RAISE NOTICE '%', myvar;

myvar := myvar + 4; RAISE NOTICE '%', myvar;

END;

$$;

 

Результат работы функции:

Данные не выходят из функции в PostgreSQL при помощи void
Данные не выходят из функции в PostgreSQL при помощи void

В выходных данных мы ничего не получаем так как фактически функция ничего не возвращает из-за void. Нам так нужно. Иначе если не использовать void, то нужно что-то возвращать да ещё с каким-то конкретным типом данных.

А вот вкладка "Messages" становится более насыщенной.

Четыре команды RAISE NOTICE в теле функции в PostgreSQL информируют о работе функции в консоли Messages
Четыре команды RAISE NOTICE в теле функции в PostgreSQL информируют о работе функции в консоли Messages

В этот раз мы видим уже 4 замечания и 4 значения. Каждая операция корректно складывает числа и увеличивает значение переменной myvar на

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdmin - https://www.pgadmin.org

Официальный сайт СУБД PostgreSQL - https://www.postgresql.org

Раздел "43.9. Сообщения и ошибки" - https://postgrespro.ru/docs/postgresql/14/plpgsql-errors-and-messages