| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
PL/Python 過程語言允許用 Python 語言寫 PostgreSQL 函數。
要在特定數據庫裡安裝 PL/Python,使用 createlang plpython dbname。
提示: 如果一門語言安裝到了 template1 裡面, 那麼所有隨後創建的數據庫都會自動安裝該語言。
到 PostgreSQL 7.4 為止,PL/Python 只能當作一種"不可信任的"語言 (意思是它沒有提供任何限制用戶可為與不可為的手段)。因此,它被重新命名為 plpythonu。 可信任的 plpython 可能在將來的某個時間能夠獲得,條件是在 Python 裡開發出了新的安全執行機制。
注意: 使用源碼包的用戶必須在安裝過程中聲明打開 PL/Python 的制作。 (請參考安裝指導獲取更多信息。)二進制包的用戶可能會在獨立的子包中找到 PL/Python。
你寫的 Python 代碼轉換成一個 Python 函數。也就是
CREATE FUNCTION myfunc(text) RETURNS text AS 'return args[0]' LANGUAGE plpython;
轉換成
def __plpython_procedure_myfunc_23456(): return args[0]
這裡假設 23456 是這個函數的 OID。
如果你沒有提供返回數值,Python 返回缺省的 None。 這個語言模塊把 Python 的None 轉換成 SQL 的 null 值。
PostgreSQL函數變量可以通過全局的 args 列表獲取. 在 myfunc 例子裡, args[0] 包含當做文本參數傳遞的數值。對于 myfunc2(text, integer),args[0] 將包含 text 參數和整數變量 args[1]。
全局字典SD可以用于在函數調用中間存儲數據。 這個變量是私有靜態數據。全局字典GD是公共數據, 可以在一個後端裡的所有 python 函數之間使用。用時小心。
每個函數都在 Python 解釋器裡獲得自己的受限制的執行對象, 因此來自 myfunc 的全局數據很函數參數是 myfunc2 所看不到的。 這裡的例外是我們上面提到的GD字典。