支援的版本: 目前 (17) / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0

44.9. 工具函數 #

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.errorplpy.fatal 實際上會引發一個 Python 例外,如果沒有捕捉到,就會傳播到呼叫查詢,導致目前的交易或子交易中止。raise plpy.Error(msg)raise plpy.Fatal(msg) 等同於呼叫 plpy.error(msg)plpy.fatal(msg),但 raise 形式不允許傳遞關鍵字引數。其他函數只會產生不同優先順序層級的訊息。特定優先順序的訊息是否報告給客戶端、寫入伺服器日誌或兩者皆有,由 log_min_messagesclient_min_messages 組態變數控制。詳情請參閱第 19 章

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)。它們等同於 第 9.4 節 中描述的內建引號函數。它們在建構臨時查詢時很有用。來自範例 41.1 的動態 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)))

提交更正

如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清的地方,請使用此表單來回報文件問題。