PL/Python 同时支持 Python 2 和 Python 3 两种语言变体(PostgreSQL 安装指导可能包含了所支持的 Python 次版本的更精确的信息)。因为 Python 2 和 Python 3 语言变体在某些重要的方面并不兼容,PL/Python 使用了下列命名和转换模式以避免混淆它们:
名为plpython2u
的 PostgreSQL 语言实现了基于 Python 2 语言变体的 PL/Python。
名为plpython3u
的 PostgreSQL 语言实现了基于 Python 3 语言变体的 PL/Python。
名为plpythonu
的语言实现了基于默认 Python语言变体(当前是 Python 2)的 PL/Python(这种默认与任何本地 Python 安装所认为的“默认”无关,例如/usr/bin/python
)。在遥远的未来,PostgreSQL 的发布中可能会把这种默认语言变体改成 Python 3,这取决于 Python 社区迁移到 Python 3 的进度。
这种模式类似于PEP 394中关于python
命令的命名和转换的推荐。
到底是 Python 2 还是 Python 3 的 PL/Python 可用或是两者都可用,取决于编译配置或者被安装的包。
如果是编译安装,则取决于在安装期间找到的 Python 版本或者用PYTHON
环境变量显式设置的版本,见第 16.4 节。要在一个安装中让两种变体的 PL/Python 都可用,源代码树必须被配置和编译两次。
这产生了下列的使用和迁移策略:
现有用户以及对 Python 3 不感兴趣的用户使用plpythonu
语言并且在可预见的未来不必做出任何改变。我们推荐通过迁移到 Python 2.6/2.7 逐步地让代码“经得起未来的考验”以简化最终迁移到 Python 3 的工作。
实际上,很多 PL/Python 函数可以用很少或者不做修改就迁移到 Python 3。
对于代码严重依赖于 Python 2 并且不打算做改变的用户可以使用plpython2u
语言。这将在很长时间内都有效,直到 PostgreSQL 完全删除掉对 Python 2 的支持。
想投入 Python 3 的怀抱的用户可以使用plpython3u
语言,在当前的标准下这将一直有效。在遥远的未来,当 Python 3 成为默认以后,出于审美的原因,“3”可能会被移除。
想要构建一个只有 Python 3 的操作系统环境的冒险者们,可以更改的扩展控制和脚本文件的内容, 让plpythonu
等价于plpython3u
, 记住这将会让他们的安装与世界的其他大部分东西都不兼容。
有关移植到 Python 3 的更多信息还可见文档What"s New In Python 3.0。
不允许在同一个会话中使用基于 Python 2 的 PL/Python 以及基于 Python 3 的 PL/Python,因为动态模块中的符号会冲突,这会导致 PostgreSQL 服务器进程的崩溃。在一个会话中有一个检查来阻止混淆 Python 的主版本,如果检测到不匹配会中断会话。不过,可以在同一个数据库中对不同的会话使用两种 PL/Python 变体。
plpy模块也提供了函数plpy.debug(msg, **kwargs)plpy.log(msg, **kwargs)plpy.info(msg, **kwargs)plpy.notice(msg, **kwargs)pl...
Image align 属性 Image 对象定义和用法align 属性可设置或者返回图像的 align 属性值。align 属性指定了与内联内容的对齐方式。...
Style orphans 属性 Style 对象定义和用法orphans 属性设置或返回一个元素必须在页面底部的可见行的最小数量(用于打印或打印预...
Style pageBreakInside 属性 Style 对象定义和用法pageBreakInside 属性设置或返回元素内的分页行为(用于打印或打印预览)。注...
Style minWidth 属性 Style 对象定义和用法minWidth 属性设置或返回元素的最小宽度。minWidth 属性只在块级元素或绝对/固定位置...
Table rules 属性 Table 对象定义和用法rules 属性可设置或返回表格的内部边线。语法设置 rules 属性:tableObject.rules="none|...
Style width 属性 Style 对象定义和用法width 属性设置或返回元素的宽度。width 属性只在块级元素或绝对/固定位置的元素发挥作用...
HTML DOM Title 对象Title 对象 Title 对象代表了一个HTML title 元素。访问 Title 对象你可以使用getElementsByTagName()来访问...
FIRST_VALUE是一个分析函数。它返回有序值中的第一个值。如果集合中的第一个值为NULL,则函数返回NULL,除非您指定IGNORE NULLS...