| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| 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。
PL/Python 寫的函數用通常的方法聲明。比如:
CREATE FUNCTION myfunc(text) RETURNS text AS 'return args[0]' LANGUAGE plpython;
以函數體形式給出的 Python 轉換成 Python 函數。比如,上面的轉換成
def __plpython_procedure_myfunc_23456(): return args[0]
這裡假設 23456 是 PostgreSQL 賦予這個函數的 OID。
如果您沒有提供返回數值,Python 返回預設的 None。 PL/Python 把 Python 的None 轉換成 SQL 的空值。
PostgreSQL函數變量可以透過全局的 args 列資料表獲取. 在 myfunc 例子裡, args[0] 包含當做文本參數傳遞的數值。對於 myfunc2(text, integer),args[0] 將包含 text 參數和整數變量 args[1]。
全局字典SD可以用於在函數調用中間儲存資料。 這個變量是私有靜態資料。全局字典GD是公共資料, 可以在一個後端裡的所有 python 函數之間使用。用時小心。
每個函數都在 Python 解釋器裡獲得自己的受限制的執行對象, 因此來自 myfunc 的全局資料很函數參數是 myfunc2 所看不到的。 這裡的例外是我們上面提到的GD字典。