Перейти к основному содержимому

Вспомогательные функции

примечание

Эта страница переведена при помощи нейросети GigaChat.

Модуль plpy также предоставляет функции:

  • plpy.debug(msg, **kwargs);
  • plpy.log(msg, **kwargs);
  • plpy.info(msg, **kwargs);
  • plpy.notice(msg, **kwargs);
  • plpy.warning(msg, **kwargs);
  • plpy.error(msg, **kwargs);
  • plpy.fatal(msg, **kwargs).

plpy.error и plpy.fatal фактически вызывают исключение Python, которое, если его не поймать, распространяется на вызывающий запрос, вызывая прерывание текущей транзакции или подтранзакции. raise plpy.Error(msg) и raise plpy.Fatal(msg) эквивалентны вызовам plpy.error(msg) и plpy.fatal(msg) соответственно, но форма raise не позволяет передавать аргументы ключевого слова. Другие функции просто генерируют сообщения разных уровней приоритета. Будут ли сообщения определенного уровня приоритета сообщены клиенту, записаны в журнал сервера или и то, и другое контролируется переменными конфигурации log_min_messages и client_min_messages. См. раздел «Настройка сервера» для получения дополнительной информации.

Аргумент msg передается как позиционный аргумент. Для обратной совместимости можно указать более одного позиционного аргумента. В этом случае строковое представление кортежа позиционных аргументов становится сообщением, о котором сообщается клиенту.

Принимаются следующие только ключевые аргументы:

  • detail;
  • hint;
  • sqlstate;
  • schema_name;
  • table_name;
  • column_name;
  • datatype_name;
  • constraint_name.

Строковое представление объектов, переданных в качестве аргументов только ключевых слов, используется для обогащения сообщений, отправляемых клиенту. Например:

CREATE FUNCTION raise_custom_exception() RETURNS void AS $$
plpy.error("custom exception message",
detail="some info about exception",
hint="hint for users")
$$ LANGUAGE plpython3u;

=# SELECT raise_custom_exception();
ERROR: plpy.Error: custom exception message
DETAIL: some info about exception
HINT: hint for users
CONTEXT: Traceback (most recent call last):
PL/Python function "raise_custom_exception", line 4, in <module>
hint="hint for users")
PL/Python function "raise_custom_exception"

Еще одна группа служебных функций – это plpy.quote_literal(string), plpy.quote_nullable(string) и plpy.quote_ident(string). Они полезны при создании запросов по мере необходимости. Эквивалент динамического SQL из PL/Python для примера «Цитирование значений в динамических запросах» будет выглядеть так:

plpy.execute("UPDATE tbl SET %s = %s WHERE key = %s" % (
plpy.quote_ident(colname),
plpy.quote_nullable(newvalue),
plpy.quote_literal(keyvalue)))