E.52. Выпуск 9.6.5
Дата выпуска: 2017-08-31
В этот выпуск вошло несколько исправлений, внесённых после версии 9.6.4. За информацией о нововведениях версии 9.6 обратитесь к Разделу E.57.
E.52.1. Миграция на версию 9.6.5
Если используется версия 9.6.X, выгрузка/восстановление базы не требуется.
Также, если вы обновляете сервер с версии, более ранней, чем 9.6.4, см. Раздел E.53.
E.52.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), не определяя значения, которые будут возвращены клиенту.
- Доработка лексического анализатора ecpg, чтобы он распознавал продолжения строк команд C-препроцессора с обратной косой чертой (Михаэль Мескес) 
- Улучшение выбора флагов компилятора для PL/Perl в Windows (Том Лейн) - В результате этого исправления предотвращаются сбои PL/Perl, возможные из-за некорректных предположений о ширине значений - time_t. Побочным эффектом, который могут заметить разработчики расширений, стала ликвидация глобального определения- _USE_32BIT_TIME_Tв сборках PostgreSQL для Windows. Это не должно приводить к проблемам, так как тип- time_tне используется ни в каких определениях API PostgreSQL.
- Исправление поведения - make checkпри использовании альтернативной (не GNU) программы make (Томас Манро)