Python 2 vs. Python 3

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 43. PL/Python - Python 过程语言 | 下一页

# 43.1. Python 2 vs. Python 3

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的变体是可能的。

上一页 | 起始页 | 下一页
PL/Python - Python 过程语言 | 上一级 | PL/Python 函数