Сформирован корректирующий выпуск СУБД 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-памяти кортежи, которые были обновлены или урезаны во время создания индекса.