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字典。