43.9. Утилитарные функции#
43.9. Утилитарные функции
Модуль plpy
также предоставляет функции
plpy.debug( |
plpy.log( |
plpy.info( |
plpy.notice( |
plpy.warning( |
plpy.error( |
plpy.fatal( |
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. Дополнительную информацию см. в разделе Глава 18.
Аргумент 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(
. Они
эквивалентны встроенным функциям заключения в кавычки, описанным в разделе Раздел 9.4. Они полезны при построении
ad-hoc запросов. Эквивалент PL/Python динамического SQL из примера Пример 40.1 будет:
string
)
plpy.execute("UPDATE tbl SET %s = %s WHERE key = %s" % ( plpy.quote_ident(colname), plpy.quote_nullable(newvalue), plpy.quote_literal(keyvalue)))