E.7. Postgres Pro Enterprise 16.6.1 #
Дата выпуска: 2024-12-13
E.7.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мог приводить к непредсказуемому поведению системы, а статистика в любом случае не могла быть рассчитана из-за сбоя сервера.
- Признана устаревшей возможность создания конструкций с использованием - JSON_EXISTS()с предложением- RETURNING. Этот синтаксис не поддерживается стандартом SQL/JSON, согласно которому предикат- JSON_EXISTS()должен возвращать только TRUE, FALSE или UNKNOWN.
- Устранена проблема использования освобождённой памяти, которая могла привести к ошибке сегментации при одновременном использовании перепланирования запросов в реальном времени и 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при инициализации кластера с помощью команды- bihactlinit или позднее с помощью функции 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.7.2. Миграция на версию 16.6.1 #
Если вы производите обновление выпуска Postgres Pro Enterprise, базирующегося на той же основной версии PostgreSQL, достаточно просто установить новый выпуск в текущий каталог инсталляции.
Важно
Чтобы обновить BiHA-кластер с Postgres Pro Enterprise версии 16.4 или ниже до Postgres Pro Enterprise версии 16.6, обратитесь к инструкциям по миграции BiHA.
Версия 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.
Для перехода с PostgreSQL, а также с выпуска Postgres Pro Standard или Postgres Pro Enterprise, базирующегося на предыдущей основной версии PostgreSQL, обратитесь к инструкциям по миграции на версию 16.