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