PostgreSQL 9.4.4 文档 | |||
---|---|---|---|
上一页 | 上一级 | 章 43. PL/Python - 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可能是什么。)在Python 社区中根据迁移到Python 3的进展, 默认会在PostgreSQL未来发布中改变成Python 3。
这个模式类似于PEP 394 中推荐的那个,关于python命令的命名和过度。
它取决于编译配置或者安装包PL/Python对Python 2或Python 3或者两者都可用。
提示: 编译变量取决于在安装期间发现了哪个Python版本或使用PYTHON 环境变量明确设置了哪个版本,参见第 15.4 节。 要在一个安装中可用PL/Python的两个变量,必须配置源代码树并编译两次。
产生下列用法和迁移策略:
已经存在的用户和目前对Python3不感兴趣的用户都使用语言名字plpythonu, 并且不必在可预见的将来改变什么。建议逐步的"以防未来"代码, 通过迁移到Python 2.6/2.7来简化最终迁移到Python 3。
实际中,许多的PL/Python函数将迁移到Python 3,需要很少或根本没有改变。
知道他们有大量Python 2相关的代码和不打算改变它的用户可以利用该 plpython2u语言名称。这将继续工作到遥远的将来, 直到Python 2支持完全被PostgreSQL抛弃。
想要投入Python 3的用户可以使用plpython3u语言名称, 这将在当前的标准永远工作。在遥远的未来,当Python 3可能会成为默认时, 他们可能会因为审美原因,想删除"3"。
想要建立一个python-3-only操作系统环境的冒失鬼,可以更改 pg_pltemplate 的内容,使plpythonu等效于plpython3u, 记住,这将使他们的安装与其他大多数人的不相容。
关于迁移到Python 3的更多信息参见文档 Python 3.0中的新特性。
不允许在同一个会话中使用基于Python 2的PL/Python和基于Python 3的PL/Python, 因为在动态模块中的符号会发生冲突,这可能导致PostgreSQL服务器进程崩溃。 有一个检查可以防止在一个会话中混合Python的主要版本,如果检测到不匹配, 它将中止会话。不过,在同一个数据库的单独会话中使用PL/Python的变体是可能的。