Вспомогательные функции
Эта страница переведена при помощи нейросети 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)))