E.38. 版本 9.3.19

E.38.1. 迁移到版本 9.3.19
E.38.2. 修改列表

发布日期: 2017-08-31

此版本包含9.3.18中的少量修复程序。    有关9.3主要版本中的新功能的信息,请查看 第 E.57 节

E.38.1. 迁移到版本 9.3.19

运行9.3.X的用户不需要转储/恢复。

但是,如果您从早于9.3.18的版本进行升级, 请查看第 E.39 节

E.38.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命令应该失败,因为它们缺少更新或检查此类值所需的基础结构。 以前,这些检查可能会遗漏包含在范围类型或子域内的相关值,可能会导致数据库变得不一致。

  • 在使用并行模式并使用列表文件选择要恢复的项目子集时, 修复pg_restore中的崩溃 (Fabrízio de Royes Mello)

  • ecpg的解析器更改为允许RETURNING子句, 而不附加C变量 (Michael Meskes)

    这允许ecpg程序包含内部使用RETURNING 的SQL构造(例如,在CTE内部),而不是使用它来定义要返回给客户端的值。

  • 在Windows上改进PL/Perl编译器标志的选择 (Tom Lane)

    此修复可避免由于对time_t值的宽度假设不一致而导致PL/Perl的可能崩溃。 扩展开发人员可能会看到的一个副作用是,在PostgreSQL Windows 版本中不再全局定义_USE_32BIT_TIME_T。这不会引起问题, 因为在PostgreSQL API定义中不使用time_t类型。