Została wydana skorygowana wersja systemu zarządzania bazą danych PostgreSQL 14.4, w której naprawiono poważny problem prowadzący, w określonych okolicznościach, do niezauważalnego uszkodzenia danych w indeksach podczas wykonywania poleceń „CREATE INDEX CONCURRENTLY” i „REINDEX CONCURRENTLY”. W indeksach utworzonych za pomocą tych poleceń mogą nie być uwzględnione niektóre rekordy, co może prowadzić do pominięcia poszczególnych wierszy podczas wykonywania zapytań SELECT wykorzystujących problematyczne indeksy.
Aby ustalić, czy indeksy B-tree zostały uszkodzone, można użyć polecenia „pg_amcheck —heapallindexed nazwa_BD”. W przypadku wykrycia błędów lub zastosowania w przeszłych wersjach poleceń „CREATE INDEX CONCURRENTLY” i „REINDEX CONCURRENTLY” z innymi typami indeksów (GiST, GIN itp.) po aktualizacji do wersji 14.4 zaleca się wykonanie ponownej indeksacji za pomocą narzędzia „reindexdb —all” lub polecenia „REINDEX CONCURRENTLY nazwa_indeksu”.
Problem dotyczy tylko gałęzi 14.x, która zawiera optymalizacje wykluczające niektóre transakcje związane z wykonywaniem „CREATE INDEX CONCURRENTLY” i „REINDEX CONCURRENTLY” podczas wykonywania operacji VACUUM. W wyniku zastosowania tych optymalizacji niektóre krotki znajdujące się w pamięci heap nie były uwzględniane w indeksach tworzonych w trybie „CONCURRENTLY”, które zostały zaktualizowane lub obcięte w trakcie tworzenia indeksu.
Źródło: opennet.ru
