E.20. 版本 9.6.5 #
发布日期:. 2017-08-31
此版本包含自 9.6.4 以来的少量修复。有关 9.6 大版本中新特性的信息,参见第 E.25 节。
E.20.2. 变更
在
information_schema.table_privileges视图中显示外部表(Peter Eisentraut)所有其他相关的
information_schema视图都包含外部表,只有这一个忽略了它们。由于这个视图定义是由 initdb 安装的,仅升级不会修复问题。如果需要在现有安装中修复,可以以超级用户身份在 psql 中执行以下操作:
SET search_path TO information_schema; CREATE OR REPLACE VIEW table_privileges AS SELECT CAST(u_grantor.rolname AS sql_identifier) AS grantor, CAST(grantee.rolname AS sql_identifier) AS grantee, CAST(current_database() AS sql_identifier) AS table_catalog, CAST(nc.nspname AS sql_identifier) AS table_schema, CAST(c.relname AS sql_identifier) AS table_name, CAST(c.prtype AS character_data) AS privilege_type, CAST( CASE WHEN -- object owner always has grant options pg_has_role(grantee.oid, c.relowner, 'USAGE') OR c.grantable THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable, CAST(CASE WHEN c.prtype = 'SELECT' THEN 'YES' ELSE 'NO' END AS yes_or_no) AS with_hierarchy FROM ( SELECT oid, relname, relnamespace, relkind, relowner, (aclexplode(coalesce(relacl, acldefault('r', relowner))).* FROM pg_class ) AS c (oid, relname, relnamespace, relkind, relowner, grantor, grantee, prtype, grantable), pg_namespace nc, pg_authid u_grantor, ( SELECT oid, rolname FROM pg_authid UNION ALL SELECT 0::oid, 'PUBLIC' ) AS grantee (oid, rolname) WHERE c.relnamespace = nc.oid AND c.relkind IN ('r', 'v', 'f') AND c.grantee = grantee.oid AND c.grantor = u_grantor.oid AND c.prtype IN ('INSERT', 'SELECT', 'UPDATE', 'DELETE', 'TRUNCATE', 'REFERENCES', 'TRIGGER') AND (pg_has_role(u_grantor.oid, 'USAGE') OR pg_has_role(grantee.oid, 'USAGE') OR grantee.rolname = 'PUBLIC');这必须在每个要修复的数据库中重复,包括
template0。清理尝试对失败事务执行
ROLLBACK时发生致命退出(例如因收到 SIGTERM)的处理(Tom Lane)这种情况可能导致断言失败。在生产构建中退出仍会发生,但会记录一条关于 “cannot drop active portal” 的意外消息。
移除致命退出期间可能触发的断言(Tom Lane)
正确识别范围类型或基于被搜索复合类型或域类型的域类型之上的列(Tom Lane)
某些更改复合类型或域类型定义的
ALTER命令本应在该类型有存储值时失败,因为它们缺少更新或检查这类值所需的基础设施。此前这些检查可能遗漏包裹在范围类型或子域中的相关值,可能允许数据度变得不一致。防止把定长按引用传递数据类型传给并行工作者进程时崩溃(Tom Lane)
修复使用并行模式并使用列表文件选择要恢复条目子集时 pg_restore 的崩溃(Fabrízio de Royes Mello)
更改 ecpg 的解析器允许不带 C 变量的
RETURNING子句(Michael Meskes)这允许 ecpg 程序包含在内部使用
RETURNING(例如在 CTE 内)而不是用它定义返回给客户端的值的 SQL 构造。更改 ecpg 的解析器识别 C 预处理命令行的反斜线续行(Michael Meskes)
改进 Windows 上 PL/Perl 编译器标志的选择(Tom Lane)
此修复避免了因对
time_t值宽度的假定不一致而可能的 PL/Perl 崩溃。扩展开发者可能看到的一个副作用是_USE_32BIT_TIME_T不再在 PostgreSQL Windows 构建中全局定义。这预计不会引起问题,因为time_t类型没有用于任何 PostgreSQL API 定义。修复通过非 GNU make 程序调用时
make check的正确行为(Thomas Munro)