Lidar com conflitos na replicação ativa-ativa
A extensão pgactive
funciona por banco de dados e não por cluster. Cada instância de banco de dados que usa pgactive
é uma instância independente e pode aceitar alterações de dados de qualquer fonte. Quando uma alteração é enviada a uma instância de banco de dados, o PostgreSQL a confirma localmente e depois usa pgactive
para replicar a alteração de forma assíncrona para outras instâncias de banco de dados. Quando duas instâncias de banco de dados do PostgreSQL atualizam o mesmo registro quase ao mesmo tempo, pode ocorrer um conflito.
A extensão pgactive
fornece mecanismos para detecção de conflitos e resolução automática. Ela rastreia o carimbo de data/hora em que a transação foi confirmada em ambas as instâncias de banco de dados e aplica automaticamente a alteração com o carimbo de data/hora mais recente. A extensão pgactive
também registra em log quando ocorre um conflito na tabela pgactive.pgactive_conflict_history
.
O pgactive.pgactive_conflict_history
continuará crescendo. Talvez você queira definir uma política de limpeza. Isso pode ser feito excluindo alguns registros regularmente ou definindo um esquema de particionamento para essa relação (e depois separando, descartando e truncando as partições de interesse). Para implementar a política de limpeza regularmente, uma opção é usar a extensão pg_cron
. Veja as informações a seguir de um exemplo para a tabela de histórico pg_cron
, Agendar manutenção com a extensão pg_cron do PostgreSQL.