Chapter 22. PL/Python - 过程语言

Table of Contents
22.1. PL/Python 函数
22.2. 触发器函数
22.3. 数据库访问
22.4. 受限制的环境

PL/Python 过程语言允许 用 Python 语言 写 PostgreSQL 函数.

要在特定数据库里安装 PL/Python,使用 createlang plpython dbname

注意: 使用源码包的用户必须在安装过程中声明打开 PL/Python 的制作 (请参考安装指导获取更多信息)。二进制包的用户可能会在 独立的子包中找到 PL/Python。

22.1. PL/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字典.