Temos uma tabela no banco de dados principal que está sendo replicada logicamente para outro banco de dados chamado SOR. Precisamos renomear esta tabela e adicionar várias tabelas à publicação no banco de dados principal. Eu tentei esse procedimento
- desabilitar o assinante no SOR DB
- renomear a tabela (de recebimento) no banco de dados SOR
- renomeie a tabela no banco de dados principal, adicione também as tabelas à publicação
- reativar o assinante no SOR DB
- atualizar a assinatura
ALTER SUBSCRIPTION my_subscription REFRESH PUBLICATION WITH (copy_data=false);
Esperei que o slot de replicação no banco de dados principal fosse liberado e, em seguida, verifiquei a contagem de registros. O banco de dados SOR perdeu alguns dados nesta janela de tempo. Existe uma maneira perfeita de renomear uma tabela na replicação lógica sem perder dados do lado do assinante? Ajudaria (copy_data=true)
?
Obrigado !
mais alguns detalhes:
- usamos PG 14 no AWS RDS
- O motivo dessa mudança é que estamos migrando uma tabela pai-filho para uma tabela particionada
- A referida tabela (a ser renomeada) tem cerca de 6 TB, e o banco de dados é nosso banco de dados de produção ativo, portanto, gostaríamos de evitar copiar esta tabela do zero.
Você deve primeiro renomear a tabela no editor e depois adicionar a tabela renomeada à publicação. Em seguida, execute
ALTER SUBSCRIPTION ... REFRESH PUBLICATION WITH (copy_data = off)
no assinante e espere até obter um conflito de replicação porque a tabela renomeada não existe no assinante. Em seguida, renomeie a tabela no assinante e a replicação lógica deverá ser capaz de se atualizar.