E.20. Выпуск 9.6.5
Дата выпуска: 2017-08-31
В этот выпуск вошло несколько исправлений, внесённых после версии 9.6.4. За информацией о нововведениях версии 9.6 обратитесь к Разделу E.25.
E.20.1. Миграция на версию 9.6.5
Если используется версия 9.6.X, выгрузка/восстановление базы не требуется.
Также, если вы обновляете сервер с версии, более ранней, чем 9.6.4, см. Раздел E.21.
E.20.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 (Томас Манро)