E.19. Выпуск 9.5.9

Дата выпуска: 2017-08-31

В этот выпуск вошло несколько исправлений, внесённых после версии 9.5.8. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.28.

E.19.1. Миграция на версию 9.5.9

Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.

Однако, если вы обновляете сервер с версии, более ранней, чем 9.5.8, см. Раздел E.20.

E.19.2. Изменения

  • Отображение сторонних таблиц в представлении information_schema.table_privileges (Питер Эйзентраут)

    Раньше сторонние таблицы отображались в остальных связанных представлениях 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).

  • Исправление обработки аварийного выхода (например, при получении SIGTERM) при попытке выполнить ROLLBACK для прерванной транзакции (Том Лейн)

    В таких ситуациях мог происходить сбой проверочного утверждения. В выпускаемых сборках выход всё равно производился, но в журнал выводилось неуместное сообщение «cannot drop active portal» (удалить активный портал нельзя).

  • Удаление проверочного утверждения, которое могло нарушаться при аварийном выходе (Том Лейн)

  • Правильное обнаружение столбцов, имеющих тип диапазона или домена, который определён поверх искомого составного или доменного типа (Том Лейн)

    Определённые команды ALTER, меняющие определение составного или доменного типа, должны проверять, нет ли в базе данных значений этого типа, и прерываться, если они есть, так как для изменения или обновления таких значений нет необходимой инфраструктуры. Ранее эти проверки могли пропустить значения, обёрнутые в типы диапазонов или вложенные домены, что могло нарушить целостность в базе данных.

  • Устранение сбоя в pg_restore при работе в параллельном режиме и использовании файла-списка объектов, подлежащих восстановлению (Фабрицио де Ройес Мелло)

  • Исправление лексического анализатора ecpg, чтобы он принимал предложения RETURNING без связанных переменных C (Михаэль Мескес)

    Благодаря этому программы ecpg могут содержать SQL-конструкции, использующие RETURNING внутри (например, внутри CTE), не определяя значения, которые будут возвращены клиенту.

  • Улучшение выбора флагов компилятора для PL/Perl в Windows (Том Лейн)

    В результате этого исправления предотвращаются сбои PL/Perl, возможные из-за некорректных предположений о ширине значений time_t. Побочным эффектом, который могут заметить разработчики расширений, стала ликвидация глобального определения _USE_32BIT_TIME_T в сборках PostgreSQL для Windows. Это не должно приводить к проблемам, так как тип time_t не используется ни в каких определениях API PostgreSQL.

  • Исправление поведения make check при использовании альтернативной (не GNU) программы make (Томас Мунро)