03.02.2023

Обновление PostgreSQL 14.4 с исправлением повреждения индексов

Сформирован корректирующий выпуск СУБД PostgreSQL 14.4, в котором устранена серьёзная проблема, при определённых обстоятельствах приводящая к незаметному повреждению данных в индексах при выполнении команд «CREATE INDEX CONCURRENTLY» и «REINDEX CONCURRENTLY». В созданных при помощи указанных команд индексах могут быть не учтены некоторые записи, что приведёт к пропуску отдельных строк при выполнении SELECT-запросов с привлечением проблемных индексов.

Для определения факта повреждения индексов B-tree можно использовать команду «pg_amcheck —heapallindexed имя_БД». В случае выявления ошибок или применения в прошлых выпусках команд «CREATE INDEX CONCURRENTLY» и «REINDEX CONCURRENTLY» с другими типами индексов (GiST, GIN и т.п.) после обновления до версии 14.4 рекомендуется выполнить переиндексацию утилитой «reindexdb —all» или командой «REINDEX CONCURRENTLY имя_индекса».

Проблеме подвержена только ветка 14.x, в которую были включены оптимизации, исключающие при выполнении операции VACUUM некоторые транзакции, связанные с выполнением «CREATE INDEX CONCURRENTLY» и «REINDEX CONCURRENTLY». В результате применения этих оптимизаций в созданные в режиме «CONCURRENTLY» индексы не попадали некоторые находящиеся в heap-памяти кортежи, которые были обновлены или урезаны во время создания индекса.

Источник.