E.1. Postgres Pro Enterprise 16.6.1 #
Дата выпуска: 2024-12-13
E.1.1. Обзор #
Этот выпуск основан на PostgreSQL 16.6 и Postgres Pro Enterprise 16.4.2. Все изменения, унаследованные от PostgreSQL 16.6, описаны в Замечаниях к выпуску PostgreSQL 16.6. По сравнению с Postgres Pro Enterprise 16.4.2 эта версия также содержит следующие изменения:
Реализована предварительная проверка того, дают ли новые данные достаточную основу для дальнейшего перепланирования запроса. Если в точке срабатывания триггера нет новых данных, выполнение запроса продолжается.
Добавлена возможность вместо
Append
формировать операциюMergeAppend
, которая позволяет исключить дополнительную сортировку, необходимую для гарантии сортировки данных. ТеперьMergeAppend
формируется с указанием столбцов для сортировки. Новая возможность применяется только в том случае, если параметр enable_appendorpath имеет значениеON
.Улучшена производительность CFS за счёт сокращения количества сообщений об аннулировании для таблиц, которые ранее вызывали множество событий повторного открытия файлов. Теперь аннулирование нацелено на конкретные сегменты, с которыми работает сборщик мусора.
В файлах JSON, содержащих замороженные планы, массивы типов параметров теперь отображаются в текстовом формате, а не в числовом, что упрощает редактирование неверного типа параметра.
Добавлена возможность преобразования связанных подзапросов
IN
в соединения.Реализована возможность выгружать состояние отдельного обслуживающего процесса путём отправки сигнала выгрузки.
Добавлен шаг для проверки программой pg_upgrade ненулевых значений в неиспользуемых полях заголовков файлов
*.cfm
.Улучшена информативность вывода перепланирования запросов в реальном времени: свойство «Total Execution Time» переименовано в «Total Elapsed Time»; добавлено новое свойство «Final Run Planning Time», отображающее время планирования во время последней переоптимизации. Также в поле «Planning Time» команды
EXPLAIN
теперь учитывается время выполнения попыток, прерванных перепланированием запросов в реальном времени.Изменён уровень ошибки для расчёта статистики по прерываниям очистки только на уровень
ERROR
(PGERROR
). Расчёт прерываний очистки для уровня ошибокPANIC
мог приводить к непредсказуемому поведению системы, а статистика в любом случае не могла быть рассчитана из-за сбоя сервера.Устранена проблема использования освобождённой памяти, которая могла привести к ошибке сегментации при одновременном использовании перепланирования запросов в реальном времени и aqo.
Исправлена регистрация причин перепланирования. Ранее все события перепланирования неправильно заносились в журнал с сообщением "Replanning triggered by timeout" (Перепланирование по тайм-ауту).
Устранена уязвимость в модуле pgpro_sfile в случаях, когда функции
SECURITY DEFINER
не контролировалиsearch_path
. Это потенциально позволяло злоумышленникам выполнять произвольный код с правами суперпользователя.Исправлено поведение функции
cfs_gc_relation
для возврата фактического количества обработанных сегментов отношения.Исправлена проблема, возникавшая при обновлении PostgreSQL или Postgres Pro Standard до Postgres Pro Enterprise с использованием pg_upgrade при переполнении счётчика смещения мультитранзакций.
Исправлена обработка 64-битных идентификаторов транзакций для корректного кодирования и декодирования идентификаторов транзакций.
Устранена проблема с обновлением PostgreSQL или Postgres Pro Standard до Postgres Pro Enterprise с помощью pg_upgrade, которая могла возникнуть при попытке преобразовать страницы кучи в формат страницы
double xmax
в случаях, когда для размещения специальной области было недостаточно свободного места. При наличии мультитранзакций это могло привести к ошибкам вида «MultiXactId XXXXX has not been created yet» (идентификатор XXXXX мультитранзакции ещё не создан) или «could not access status of transaction XXXXXX» (не удалось получить доступ к статусу транзакции XXXXXX), в зависимости от версии сервера. При этом не должно происходить потери данных, поскольку не происходит фактического преобразования. Теперь страницы безопасно преобразуются при первом обращении.Устранена утечка памяти, которая могла возникнуть, если в выводе команды
EXPLAIN
было более 64 столбцов.Устранена ошибка сегментации, которая могла возникнуть при выполнении команды
COPY TO
при использовании модуля online_analyze.Устранена проблема, из-за которой команда
EXPLAIN ANALYZE
отображала неверное количество вставленных и конфликтующих кортежей во время вставки строк с конфликтующими первичными ключами при использованииON CONFLICT DO NOTHING
.Устранена проблема, которая могла замедлить выполнение запроса. Причина заключалась выборе неоптимального индекса оптимизатором из-за отсутствия оценки его стоимости после удаления избыточных предложений с включённым (значение
ON
) параметром enable_appendorpath.Устранена проблема с разбором имён подготовленных операторов в случаях, когда имя оператора содержало имя команды SQL, а также удалён ставший ненужным параметр
sr_plan.max_consts_len
.Добавлена поддержка расширенного протокола запросов для перепланирования запросов в реальном времени.
Добавлена поддержка архитектуры ARM для РЕД ОС МУРОМ 8.
Удалена поддержка загрузки устаревших данных, ранее необходимая для чтения устаревших двоичных планов sr_plan и преобразования их в формат JSON. Сохранена минимальная функциональность для обнаружения устаревших файлов, их резервного копирования и записи сообщения об этом в журнал.
Обновлён модуль aqo. Включены следующие исправления и усовершенствования:
Реализован режим «песочницы» aqo, позволяющий работать в изолированной среде, не затрагивая основную базу знаний aqo. Этот режим можно включить как на ведущем, так и на резервном узле, установив для параметра aqo.sandbox значение
on
.Улучшен поиск соседей в aqo (
aqo.wide_search
=on
) для одновременного использования данных от нескольких соседей. Также пересмотрено взаимодействие поиска сaqo.min_neighbors_for_predicting
, чтобы допустить поиск соседей для запросов, у которых число образцов данных меньше заданного в параметре значения. Ранее такие запросы не учитывались.Исправлена ошибка выхода за пределы массива в логике обновления «умного» тайм-аута операторов aqo, а также проблема с некорректной записью статистики в
aqo_query_stats
при переполнении массивов. В предыдущих версиях использованиеaqo_query_stat_update
с массивами величиной 20 и более могло привести к записи последующих изменений статистики в неконтролируемые сегменты памяти. Обязательно установите Postgres Pro как на ведущем, так и на ведомом сервере, чтобы избежать подобных проблем с повреждением памяти.
Улучшена функциональность встроенной отказоустойчивости — включены следующие возможности, усовершенствования и исправления:
Расширение biha обновлено до версии 1.4.
Реализованы функции-обработчики для вызова пользовательских SQL-функций, которые могут уведомлять пользователей или внешние службы о событиях в BiHA-кластере.
Реализован механизм нестрогой синхронной репликации для BiHA-кластера. Чтобы сделать ограничения синхронной репликации нестрогими, укажите параметр
--sync-standbys-min
при инициализации кластера с помощью командыbihactl
init или позднее с помощью функции biha.set_sync_standbys_min.Добавлен параметр конфигурации biha.node_priority, позволяющий управлять голосованием с помощью выставления приоритета узлов в BiHA-кластере.
Добавлены функции biha.set_nquorum и biha.set_minnodes для независимой настройки параметров конфигурации biha.nquorum и biha.minnodes. Ранее эти параметры можно было задать только вместе с помощью функции biha.set_nquorum_and_minnodes.
Добавлены параметры конфигурации biha.can_vote и biha.can_be_leader, которые позволяют управлять способностью узлов BiHA-кластера голосовать и выдвигаться в качестве кандидатов на выборах нового лидера.
Добавлен параметр конфигурации biha.flw_ro, позволяющий определить, может ли узел быть доступен для операций чтения.
Реализован механизм, который автоматически отключает чтение с узла в состоянии
NODE_ERROR
.Обновлено представление biha.nodes_v. В таблице представления теперь также отображается узел, на котором выполняется запрос к представлению.
Изменён способ управления параметрами конфигурации, важными для работы biha. Ранее было разрешено изменять следующие параметры вручную: primary_conninfo, primary_slot_name, synchronous_standby_names. Однако ручное изменение вышеупомянутых параметров могло негативно влиять на работу BiHA-кластера. Теперь в случаях, когда расширение biha загружено и настроено, эти параметры контролируются только им, и их нельзя изменить с помощью
ALTER SYSTEM
.Оптимизировано поведение BiHA-кластера в случаях, когда репликация не может быть продолжена из-за удаления нужных файлов WAL, определённых в параметре
max_slot_wal_keep_size
. В такой ситуации отстающий узел переходит в состояниеNODE_ERROR
.Устранена ошибка, приводившая к перезагрузке кандидата в случае, когда идентификатор старого лидера был неизвестен кандидату.
Устранена проблема роста размера каталога данных на узле рефери в режиме
referee_with_wal
.Устранена ошибка, вызывавшая проблемы аутентификации при настройке BiHA-кластера из существующего кластера. Расширение biha теперь использует тот же алгоритм шифрования паролей, который установлен в файле
postgresql.conf
преобразованного ведущего узла.
Расширение citus обновлено до версии 12.1.5.2.
Приложение mamonsu обновлено до версии 3.5.9, в которой улучшена производительность и исправлены некоторые ошибки. Основные изменения перечислены ниже:
Добавлена поддержка систем, в которых установлена версия setuptools выше 67.7.2.
Прекращено использование указания
user:group
с точками на этапе перед установкой RPM.
Расширение multimaster обновлено до версии 1.2.0. Значительно увеличена производительность синхронизации за счёт включения асинхронных операций фиксации на отстающем узле, который синхронизируется с узлом-донором. Использование таких операций можно включить с помощью параметра
multimaster.enable_async_3pc_on_catchup
.Драйвер ODBC обновлён до версии 17.00.0002.
Расширение oracle_fdw обновлено до версии 2.7.0.
Модуль orafce обновлён до версии 4.13.5.
Расширение pg_filedump обновлено до версии 17.1, в которой была устранена проблема, приводившая к ошибке сегментации при обработке неполных страниц и сбою pg_filedump.
Расширение pg_hint_plan обновлено до версии 1.6.1.
Утилита pg_integrity_check обновлена для отображения фактических значений контрольной суммы только с параметром
--verbose
, если контрольные суммы различаются.Расширение pg_portal_modify обновлено до версии 0.3.4.
Обновлено расширение pg_proaudit. Включены следующие исправления и усовершенствования:
Добавлена регистрация событий безопасности, связанных с операциями с профилями:
CREATE PROFILE
,ALTER PROFILE
иDROP PROFILE
.Изменено распределение событий безопасности, связанных с функциями и хранимыми процедурами, по группам событий безопасности: группа
ALL_DDL
теперь не включает события, связанные с функциями и хранимыми процедурами,ALL_PROC
включаетCREATE
,ALTER
иDROP
, аALL_DML
включаетEXECUTE
.Исправлена совместимость с пулом соединений. Ранее могли возникнуть проблемы при регистрации событий безопасности
AUTHENTICATE
иDISCONNECT
.Исправлена регистрация расширением pg_proaudit событий безопасности для секционированных таблиц. Теперь события
SELECT/UPDATE/INSERT/DELETE/TRUNCATE
в секционированной таблице регистрируются, если правила регистрации подразумевают регистрацию соответствующих событий для этой таблицы. Ранее регистрировались только события для отдельных секций.
Приложение pg_probackup обновлено до версии 2.8.5 Enterprise, в которой улучшена производительность и исправлены некоторые ошибки:
Добавлена возможность вывода команды
version
в формате JSON с помощью--format
=json
.Добавлен параметр
--all
для командыamcheck
, который позволяет выполнить все проверки в одной команде.Добавлена поддержка параметра
include
в файле конфигурации. Содержимое файла, указанного вinclude
, добавляется в файл конфигурации вместо этого параметра.Добавлена возможность указывать конкретное количество потоков для выполнения резервного копирования и его последующей проверки, указав их в параметрах
--backup-threads
и--validate-threads
соответственно.Изменён приоритет значений
PGDATA
иBACKUP_PATH
. Теперь приоритет имеют значения из параметров командной строки.Добавлена проверка файлов WAL для резервных копий, объединяемых командой
merge
.Сообщение об ошибке, которое выдавалось, когда команда
validate
, запущенная с параметром--wal
, обнаруживала архив в состоянииDEGRADED
, было заменено предупреждением, поскольку резервные копии в этом состоянии не влияют на корректность восстановления в целом.Добавлена поддержка параметра
--s3-config-file
дляrestore_command
. Файлpostgresql.auto.conf
должен включатьrestore_command
с параметром--s3-config-file
, если резервная копия была создана с этим параметром.Для
PG_PROBACKUP_S3_IGNORE_CERT_VER
установлено значение по умолчаниюon
согласно документации.Устранена проблема, которая могла возникнуть при слишком длинной командной строке.
Устранена ошибка, которая могла возникнуть во время проверки или восстановления, если использовался механизм PITR из предыдущей линии времени.
Исправлена проблема, которая могла возникнуть, когда порт подключения S3 был указан как в
PG_PROBACKUP_S3_PORT
, так и вPG_PROBACKUP_S3_HOST
. Теперь значение, указанное вPG_PROBACKUP_S3_HOST
, вместе с адресом имеет более высокий приоритет.
Расширение pgpro_bfile обновлено до версии 1.2, pgpro_sfile — до версии 1.2 и pgpro_rp — до версии 1.1. Функции, которые ранее проверяли, что определённые функции вызывались суперпользователем, теперь проверяют, что эти функции были вызваны с правами суперпользователя.
Утилита pgpro_controldata обновлена до версии 17.1.0.
Расширение pgpro_stats обновлено до версии 1.8, в которой добавлена поддержка Postgres Pro 17. Основные изменения перечислены ниже:
Обновлены представления
pgpro_stats_statements
иpgpro_stats_totals
, чтобы включить новые поля, добавленные в модуль pg_stat_statements. Также были обновлены соответствующие функции.Упрощён доступ к представлениям и функциям. В частности, всем пользователям был предоставлен доступ к представлениям
pgpro_stats_archiver
,pgpro_stats_vacuum_database
,pgpro_stats_vacuum_tables
иpgpro_stats_vacuum_indexes
. Ранее для этих представлений требовалось явное предоставление прав доступа. Доступ к выполнению функцииpgpro_stats_trace_reset
, которая ранее могла быть выполнена любым пользователем, теперь ограничен суперпользователями.Реализована оптимизация, которая в некоторых случаях снижает время блокировки при копировании метрик из локальной памяти в общую.
Устранена избыточная проверка удержания блокировки при доступе к хеш-таблице фильтров трассировки сеансов.
Исправлена обработка параметра конфигурации
pgpro_stats.stats_temp_directory
. Ранее после перезапуска сервера, необходимого для вступления в силу изменений значения этого параметра, могла возникнуть фатальная ошибка «pfree called with invalid pointer» (неверный указатель для функции pfree).Устранена проблема, которая могла возникнуть во время трассировки сеанса и вызвать ошибки «could not write file ""pg_stat/pgpro_stats_filters.trace.tmp"": No such file or directory» (не удалось записать файл ""pg_stat/pgpro_stats_filters.trace.tmp"": Такого файла или каталога не существует). Параллельная запись из разных сеансов в файл трассировки теперь работает корректно, и процессы могут выполнять запись в файл трассировки параллельно без конфликтов.
Модуль pgpro_pwr обновлён до версии 4.7, в которой улучшена производительность и добавлены новые возможности. Основные изменения перечислены ниже:
Механизм промежуточных выборок для сбора относительно быстро меняющихся данных.
Новые таблицы отчётов, в частности касающиеся состояний сеансов.
Поддержка новых статистик Postgres Pro 17.
Возможность не сбрасывать статистику расширения по сбору статистики при получении выборки.
Изменение тип поля, отслеживающего идентификаторы транзакций в определённой таблице, с
xid
наtext
. Использование типаxid
ранее могло привести к сбою pg_upgrade при обновлении с Postgres Pro Standard до Postgres Pro Enterprise.
Приложение pgpro_scheduler обновлено до версии 2.10, в которую были включены следующие изменения:
Исправлена проблема с автоматическим перезапуском разовых заданий после их прерывания.
Исправлено поведение функции
schedule.get_active_jobs
для корректного вывода списка выполняющихся заданий cron.Устранена проблема, из-за которой возникающие во время выполнения задания ошибки не регистрировались должным образом из-за ограничения первичного ключа, препятствующего внесению нескольких записей в журнал.
Устранена ошибка, из-за которой работа
at job executor
завершалась сбоем, еслиdatabase manager
преждевременно освобождал сегмент общей памяти до того, как к нему подключался рабочий процесс.Устранена проблема, из-за которой функция
schedule.timetable
не выводила следующее время выполнения заданий cron ни сnext_time_statement
, ни с массивом дат. Устранена проблема с расчётом следующего времени выполнения для заданий cron, из-за которой экземпляры заданий пропускались.Устранена проблема, приводившая к сбоям баз данных из-за ошибок сегментации в фоновом рабочем процессе исполнителя заданий.
Модуль pg_repack обновлён до версии 1.5.1.
Расширение pg_wait_sampling обновлено для отслеживания идентификаторов подзапросов и операторов утилит. Также был добавлен параметр
pg_wait_sampling.sample_cpu
, который позволяет указать режим обработки показаний, определяющий, следует ли выполнять обработку показаний процессов, использующих ЦП.Модуль pljava обновлён до версии 1.6.8.
Расширение PLV8 обновлено до версии 3.2.3.
Обеспечена совместимость
postgres_fdw
с автономными транзакциями.Расширение PTRACK обновлено для предотвращения возможных проблем с резервными копиями PTRACK путём автоматического удаления файла
ptrack.map
при отключении PTRACK.Расширение tds_fdw обновлено до версии 2.0.4.
E.1.2. Миграция на версию 16.6.1 #
Если вы производите обновление выпуска Postgres Pro Enterprise, базирующегося на той же основной версии PostgreSQL, достаточно просто установить новый выпуск в текущий каталог инсталляции.
Важно
Чтобы обновить BiHA-кластер с Postgres Pro Enterprise версии 16.4 и ниже до Postgres Pro Enterprise версии 16.6, см. раздел Миграция BiHA-кластера на версию 16.6.
Версия ABI может измениться в корректирующем выпуске Postgres Pro. В таком случае при попытке запустить расширение возникает ошибка ABI mismatch
(Несоответствие ABI), поэтому обязательно установите новую версию расширения, поставляемую с новым выпуском Postgres Pro, или перекомпилируйте стороннее расширение, чтобы использовать его с текущей версией Postgres Pro.
При обновлении отказоустойчивого кластера с Postgres Pro Enterprise версии 16.3.x или ниже сначала отключите автоматическое аварийное переключение узлов, если оно было включено, и обновите все резервные серверы, затем обновите ведущий сервер, повысьте резервный сервер до ведущего и перезапустите бывший ведущий сервер (возможно, с использованием pg_rewind).
Если вы создаёте резервные копии с помощью pg_probackup и ранее обновили его до версии 2.8.0 Enterprise или 2.8.1 Enterprise, обязательно обновите его до версии 2.8.2 Enterprise или выше и сделайте полную резервную копию базы данных после обновления, поскольку резервные копии, созданные с использованием этих версий, могут быть повреждены. Чтобы проверить, повреждены ли резервные копии, созданные с помощью версий 2.8.0 или 2.8.1, можно использовать версию 2.8.2.
Чтобы обновить BiHA-кластер с Postgres Pro Enterprise версии 16.3 и ниже до Postgres Pro Enterprise версии 16.4, см. раздел Миграция BiHA-кластера на версию 16.4.
Чтобы обновить BiHA-кластер с Postgres Pro Enterprise версий 16.1 и 16.2 до Postgres Pro Enterprise версии 16.3, см. раздел Migrating the BiHA Cluster to Version 16.3.
Для перехода с PostgreSQL, а также с выпуска Postgres Pro Standard или Postgres Pro Enterprise, базирующегося на предыдущей основной версии PostgreSQL, обратитесь к инструкциям по миграции на версию 16.