Sobre a extensão pglogical

Esta página fornece uma visão geral da extensão pglogical, os benefícios e as limitações dela.

Visão geral

A extensão pglogical é uma ferramenta de replicação lógica robusta e flexível projetada para o PostgreSQL. Ela também oferece suporte a alta disponibilidade (HA) e recuperação de desastres (DR).

A replicação binária tradicional, comumente conhecida como replicação física, replica as mudanças no sistema de arquivos e no nível de bloco, resultando em um espelho físico no sistema de destino. Embora a replicação física seja robusta e proteja todo o cluster de banco de dados, ela é unidirecional e exige acesso ao arquivo de dados do banco de dados e aos arquivos de registro prévio de escrita (WAL, na sigla em inglês).

Já a extensão pglogical extrai alterações SQL de um banco de dados do provedor, as replica e as reproduz em um ou mais bancos de dados de assinantes. Essa replicação é conhecida como replicação lógica.

Ao usar a extensão pglogical, é possível fazer o seguinte:

  • Replique dados entre vários bancos de dados do AlloyDB Omni.
  • Replique dados entre o AlloyDB Omni e o Google Cloud AlloyDB.
  • Replique dados entre o AlloyDB Omni e outras distribuições do PostgreSQL que incluem muitos serviços em nuvem de terceiros.

Vantagens

A replicação lógica com a extensão pglogical oferece os seguintes benefícios:

  • Replicação seletiva:oferece a flexibilidade de definir filtros e regras para determinar quais dados você quer replicar e para onde. Você pode escolher quais tabelas são incluídas e como as novas tabelas são processadas, independentemente de serem incluídas ou não. Também é possível adicionar filtros de coluna e linha. Um apply delay opcional pode ser adicionado para situações em que você quer que o assinante represente algum ponto final no tempo do provedor.

  • Replicação bidirecional e multiprimária:todos os bancos de dados de membros são abertos em um estado de leitura/gravação e totalmente utilizáveis. Cada banco de dados de endpoint atua como provedor e assinante, permitindo a criação de cenários avançados de replicação e possibilitando a possibilidade de atualizações de dados feitas em endpoints diferentes.

  • Suporte do provedor de nuvem:provedores de nuvem, como o Google, reconhecem o valor da extensão pglogical e a integram aos serviços de nuvem, como o Google Cloud SQL para PostgreSQL e o AlloyDB. Outros provedores de nuvem também incluem a extensão pglogical como uma opção, permitindo configurações multinuvem ou híbridas.

  • Replicação entre versões:como o pglogical replica as instruções SQL reais, ele permite a replicação entre as versões principais do PostgreSQL. Principalmente quando o banco de dados de origem do provedor é uma versão anterior à do banco de dados de destino do assinante, a replicação entre versões pode ser implementada com confiabilidade.

    A extensão pglogical oferece suporte a muitas versões mais antigas do PostgreSQL, como a versão 9.4 e mais recentes. Isso a torna a escolha ideal para cenários em que você lida com sistemas legados e quer replicar dados em versões mais modernas do PostgreSQL, como as usadas no AlloyDB Omni e no Google Cloud AlloyDB.

Em resumo, a extensão pglogical oferece uma solução de replicação lógica com muitos recursos, com compatibilidade para versões mais antigas do PostgreSQL e serviços gerenciados pelo Cloud, incluindo o Google Cloud SQL para PostgreSQL e o AlloyDB.

Limitações da replicação lógica

Todas as tecnologias de replicação lógica, incluindo aquelas usadas com outras plataformas de banco de dados relacional, têm algumas limitações, e qualquer gerenciamento inadequado pode interromper o processo de replicação.

Considere os seguintes pontos para uma implementação confiável:

  • Consideração sobre como processar objetos com escopo de cluster e de banco de dados que estão fora do escopo de replicação. A extensão pglogical funciona no nível do banco de dados e apenas em um conjunto especificado de tabelas e sequências. Outros tipos de objetos, como funções e procedimentos, precisam ser replicados usando outro método.
  • É recomendável que todas as tabelas de replicação tenham uma chave primária. É possível usar o recurso REPLICA IDENTITY da tabela para informar à extensão pglogical quais colunas identificam exclusivamente as linhas. Isso precisa ser evitado sempre que possível. As tabelas que não têm chaves primárias são estáticas por natureza, nunca são UPDATED ou DELETED e oferecem suporte apenas a INSERTS. Esses tipos de tabelas não precisam de chaves primárias.
  • Gerenciamento de gatilhos e sequências em bancos de dados de assinantes. Por padrão, os acionadores são definidos como ORIGIN ou LOCAL e não são acionados no banco de dados do assinante quando as linhas são replicadas. Todos os acionadores precisam ser verificados para garantir que a opção REPLICA esteja definida para qualquer acionador, para que ele não seja acionado no lado do assinante, a menos que seja necessário.
  • Lidar com a resolução de conflitos manualmente ou automaticamente usando regras who wins.
  • Execução de comandos da linguagem de definição de dados (DDL) por implementação manual em todos os endpoints ou pela replicação automática de DDL para bancos de dados de assinantes usando a função de API pglogical adequada no banco de dados do provedor.
  • Garantir que as tabelas e sequências recém-criadas sejam adicionadas manualmente ou automaticamente aos conjuntos de replicação nos bancos de dados principais.
  • Garantir que uma rede TCP robusta, confiável, segura e com bom desempenho exista entre todos os endpoints na topologia de replicação.

Outras restrições e limitações da extensão pglogical incluem as seguintes:

  • No momento, as permissões de superusuário são necessárias para a versão 2.4.3 do pglogical.
  • Embora a maioria das tabelas e sequências possa ser replicada, outros tipos de objeto não são replicados pela extensão pglogical, e as tabelas TEMPORARY e UNLOGGED não são replicadas.
  • Para replicar o DDL, a função da API pglogical precisa ser usada. Comandos DDL nativos não são replicados, exceto o comando TRUNCATE.
  • Opera em um nível de objeto por tabela e por sequência e é implantado por banco de dados. Isso significa que alguns objetos, incluindo objetos no escopo do cluster, como users e roles, são excluídos da replicação e precisam ser gerenciados separadamente.

A seguir