È stata rilasciata una versione correttiva del DBMS PostgreSQL 14.4, che risolve un grave problema che, in determinate circostanze, può portare a danni invisibili ai dati negli indici durante l'esecuzione dei comandi "CREATE INDEX CONCURRENTLY" e "REINDEX CONCURRENTLY". Negli indici creati tramite questi comandi potrebbero non essere inclusi alcuni record, il che comporterebbe il salto di singole righe durante l'esecuzione di query SELECT che utilizzano gli indici problematici.
Per verificare la presenza di danni negli indici B-tree, è possibile utilizzare il comando "pg_amcheck --heapallindexed nome_DB". In caso di errori riscontrati o se sono state utilizzate nelle versioni precedenti le comandi "CREATE INDEX CONCURRENTLY" e "REINDEX CONCURRENTLY" con altri tipi di indici (GiST, GIN, ecc.), dopo l'aggiornamento alla versione 14.4 si consiglia di eseguire la reindicizzazione utilizzando lo strumento "reindexdb --all" oppure il comando "REINDEX CONCURRENTLY nome_indice".
Il problema colpisce solo il ramo 14.x, che ha incluso ottimizzazioni che escludono alcune transazioni legate all'esecuzione di "CREATE INDEX CONCURRENTLY" e "REINDEX CONCURRENTLY" durante l'operazione VACUUM. Di conseguenza, a causa di queste ottimizzazioni, alcuni tuple situati nella memoria heap creati in modalità "CONCURRENTLY" non venivano inclusi negli indici, se erano stati aggiornati o ristretti durante la creazione dell'indice.
Fonte: opennet.ru
