46.1. Python 2 vs. Python 3

PL/Python 同时支持 Python 2 和 Python 3 两种语言变体(PostgreSQL 安装指导可能包含了所支持的 Python 次版本的更精确的信息)。因为 Python 2 和 Python 3 语言变体在某些重要的方面并不兼容,PL/Python 使用了下列命名和转换模式以避免混淆它们:

这种模式类似于PEP 394中关于python命令的命名和转换的推荐。

到底是 Python 2 还是 Python 3 的 PL/Python 可用或是两者都可用,取决于编译配置或者被安装的包。

提示

如果是编译安装,则取决于在安装期间找到的 Python 版本或者用PYTHON环境变量显式设置的版本,见第 17.4 节。要在一个安装中让两种变体的 PL/Python 都可用,源代码树必须被配置和编译两次。

这产生了下列的使用和迁移策略:

有关移植到 Python 3 的更多信息还可见文档What's New In Python 3.0

不允许在同一个会话中使用基于 Python 2 的 PL/Python 以及基于 Python 3 的 PL/Python,因为动态模块中的符号会冲突,这会导致 PostgreSQL 服务器进程的崩溃。在一个会话中有一个检查来阻止混淆 Python 的主版本,如果检测到不匹配会中断会话。不过,可以在同一个数据库中对不同的会话使用两种 PL/Python 变体。