Table of Contents
PL/Python过程语言允许使用Python 语言编写PostgreSQL函数和过程。
要在特定数据库中安装 PL/Python,可使用CREATE EXTENSION plpythonu(另见Section 44.1)。
如果把某种语言安装到template1中,之后创建的所有数据库都会自动安装该语言。
PL/Python 只能作为一种“不受信任的”语言使用,这意味着它不提供任何机制来限制用户能在其中做什么,因此其名称为plpythonu。如果将来能在 Python 中开发出安全的执行机制,受信任的变体plpython可能会出现。使用不受信任的 PL/Python 编写函数时,函数编写者必须确保该函数不会被用来做任何不希望发生的事情,因为它能够做到任何以数据库管理员身份登录的用户所能做的事情。只有超级用户才能在plpythonu这类不受信任的语言中创建函数。
源码包用户必须在安装过程中专门启用 PL/Python 的构建(更多信息请参阅安装说明)。二进制包用户则可能会在单独的子包中找到 PL/Python。
PL/Python 同时支持 Python 2 和 Python 3 语言变体。(PostgreSQL 安装说明中可能包含有关所支持 Python 精确次版本号的更多信息。)由于 Python 2 和 Python 3 语言变体在一些重要方面不兼容,PL/Python 使用以下命名和过渡方案以避免混用:
PostgreSQL 中名为plpython2u的语言实现了基于 Python 2 语言变体的 PL/Python。
PostgreSQL 中名为plpython3u的语言实现了基于 Python 3 语言变体的 PL/Python。
名为plpythonu的语言实现了基于默认 Python 语言变体的 PL/Python,当前默认为 Python 2。(此默认值独立于任何本地 Python 安装可能认为的其“默认”版本,例如/usr/bin/python可能是哪个版本。)默认值将来可能会在较远的 PostgreSQL 版本中改为 Python 3,具体取决于 Python 社区向 Python 3 迁移的进展。
该方案类似于PEP 394中关于python命令命名和过渡的建议。
基于 Python 2 或 Python 3 的 PL/Python 是否可用(或者两者都可用),取决于构建配置或已安装的软件包。
所构建的变体取决于安装时找到的 Python 版本,或使用PYTHON环境变量显式设置的版本;请参见Section 17.3.2。要在同一个安装中同时提供两种 PL/Python 变体,需要对源代码树进行两次配置和构建。
由此产生了以下使用和迁移策略:
现有用户以及目前对 Python 3 不感兴趣的用户可以使用语言名称plpythonu,在可预见的将来不需要做任何改变。建议通过逐步迁移到 Python 2.6/2.7 来“面向未来”地准备代码,以简化最终向 Python 3 的迁移。
实际上,许多 PL/Python 函数只需很少或不做改动即可迁移到 Python 3。
已知自己拥有大量依赖 Python 2 的代码,且不打算修改的用户,可以使用plpython2u语言名称,以在默认值变为 Python 3 后仍然可用。
希望直接开始使用 Python 3 的用户可以使用plpython3u语言名称,它从今天起就一直可用。在遥远的将来,当默认值改为 Python 3 时,为了对正向兼容性做出让步,除了plpython3u之外可能还会继续接受plpythonu。
希望代码能在 Python 2 和 Python 3 上都运行的用户可以使用plpythonu语言名称,以在切换到最终新默认值时能够受益,但他们需要自己负责使代码与两个 Python 大版本兼容。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。