Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Computação
Elastic Cloud Server
Bare Metal Server
Auto Scaling
Image Management Service
Dedicated Host
FunctionGraph
Cloud Phone Host
Huawei Cloud EulerOS
Redes
Virtual Private Cloud
Elastic IP
Elastic Load Balance
NAT Gateway
Direct Connect
Virtual Private Network
VPC Endpoint
Cloud Connect
Enterprise Router
Enterprise Switch
Global Accelerator
Gerenciamento e governança
Cloud Eye
Identity and Access Management
Cloud Trace Service
Resource Formation Service
Tag Management Service
Log Tank Service
Config
Resource Access Manager
Simple Message Notification
Application Performance Management
Application Operations Management
Organizations
Optimization Advisor
Cloud Operations Center
Resource Governance Center
Migração
Server Migration Service
Object Storage Migration Service
Cloud Data Migration
Migration Center
Cloud Ecosystem
KooGallery
Partner Center
User Support
My Account
Billing Center
Cost Center
Resource Center
Enterprise Management
Service Tickets
HUAWEI CLOUD (International) FAQs
ICP Filing
Support Plans
My Credentials
Customer Operation Capabilities
Partner Support Plans
Professional Services
Análises
MapReduce Service
Data Lake Insight
CloudTable Service
Cloud Search Service
Data Lake Visualization
Data Ingestion Service
GaussDB(DWS)
DataArts Studio
IoT
IoT Device Access
Outros
Product Pricing Details
System Permissions
Console Quick Start
Common FAQs
Instructions for Associating with a HUAWEI CLOUD Partner
Message Center
Segurança e conformidade
Security Technologies and Applications
Web Application Firewall
Host Security Service
Cloud Firewall
SecMaster
Anti-DDoS Service
Data Encryption Workshop
Database Security Service
Cloud Bastion Host
Data Security Center
Cloud Certificate Manager
Situation Awareness
Managed Threat Detection
Blockchain
Blockchain Service
Serviços de mídia
Media Processing Center
Video On Demand
Live
SparkRTC
Armazenamento
Object Storage Service
Elastic Volume Service
Cloud Backup and Recovery
Cloud Server Backup Service
Storage Disaster Recovery Service
Scalable File Service
Volume Backup Service
Data Express Service
Dedicated Distributed Storage Service
Containers
Cloud Container Engine
SoftWare Repository for Container
Application Service Mesh
Ubiquitous Cloud Native Service
Cloud Container Instance
Bancos de dados
Relational Database Service
Document Database Service
Data Admin Service
Data Replication Service
GeminiDB
GaussDB
Distributed Database Middleware
Database and Application Migration UGO
TaurusDB
Middleware
Distributed Cache Service
API Gateway
Distributed Message Service for Kafka
Distributed Message Service for RabbitMQ
Distributed Message Service for RocketMQ
Cloud Service Engine
EventGrid
Dedicated Cloud
Dedicated Computing Cluster
Aplicações de negócios
ROMA Connect
Message & SMS
Domain Name Service
Edge Data Center Management
Meeting
AI
Face Recognition Service
Graph Engine Service
Content Moderation
Image Recognition
Data Lake Factory
Optical Character Recognition
ModelArts
ImageSearch
Conversational Bot Service
Speech Interaction Service
Huawei HiLens
Developer Tools
SDK Developer Guide
API Request Signing Guide
Terraform
Koo Command Line Interface
Distribuição de conteúdo e computação de borda
Content Delivery Network
Intelligent EdgeFabric
CloudPond
Soluções
SAP Cloud
High Performance Computing
Serviços para desenvolvedore
ServiceStage
CodeArts
CodeArts PerfTest
CodeArts Req
CodeArts Pipeline
CodeArts Build
CodeArts Deploy
CodeArts Artifact
CodeArts TestPlan
CodeArts Check
Cloud Application Engine
MacroVerse aPaaS
KooPhone
KooDrive
Central de ajuda/ Relational Database Service/ Melhores práticas/ RDS for PostgreSQL/ Publicações e assinaturas do RDS for PostgreSQL

Publicações e assinaturas do RDS for PostgreSQL

Atualizado em 2024-09-24 GMT+08:00

Definição lógica

Uma publicação pode ser definida em qualquer servidor de replicação física principal. O nó onde uma publicação é definida é chamado de publicador. Uma publicação é um conjunto de alterações geradas a partir de uma tabela ou de um grupo de tabelas e também pode ser descrito como um conjunto de alterações ou um conjunto de replicação. Cada publicação existe em apenas um banco de dados.

Uma assinatura é o lado downstream da replicação lógica. O nó onde uma assinatura é definida é chamado de assinante. Uma assinatura define a conexão com outro banco de dados e o conjunto de publicações (uma ou mais) às quais deseja se inscrever. O banco de dados de assinantes se comporta da mesma forma que qualquer outra instância do RDS for PostgreSQL (primária) e pode ser usado como editor para outros bancos de dados definindo suas próprias publicações.

Permissões necessárias

  • Para criar uma publicação, o publicador deve ter a permissão de replicação.
  • Ao criar uma publicação para ALL TABLES, verifique se o editor usa o usuário root da versão inicial ou posterior para escalonamento de privilégios.
  • Ao criar ou excluir uma assinatura, verifique se o assinante usa o usuário root da versão inicial ou posterior para escalonamento de privilégios.

Para obter detalhes sobre o escalonamento de privilégios root de cada versão, consulte Privilégios do usuário root.

Restrições às publicações

  • Atualmente, as publicações só podem conter tabelas (índices, números de sequência e exibições materializadas não podem ser publicados). Cada tabela pode ser adicionada a várias publicações, se necessário.
  • Uma publicação pode ter vários assinantes.
  • ALL TABLES podem ser usada para publicar todas as tabelas.
  • Várias publicações podem ser criadas em um determinado banco de dados, mas cada publicação deve ter um nome exclusivo. As publicações criadas podem ser obtidas consultando pg_publication.
  • As publicações podem optar por limitar as alterações que produzem a qualquer combinação de INSERT, UPDATE, DELETE e TRUNCATE, semelhante à forma como os gatilhos são disparados por tipos de evento específicos. Por padrão, todos os tipos de operação são replicados.

    Exemplo: para publicar as operações UPDATE e DELETE na tabela t1:

    CREATE PUBLICATION update_delete_only FOR TABLE t1 WITH (publish = 'update, delete') ;
  • Identidade da réplica: uma tabela publicada deve ter uma identidade de réplica configurada para poder replicar as operações UPDATE e DELETE. Se nothing estiver definido para a identidade da réplica, as operações UPDATE ou DELETE subsequentes causarão um erro no publicador.

    Você pode obter a identidade da réplica de uma tabela em pg_class.relreplident.

    relreplident é do tipo de caractere e identifica colunas usadas para formar "identidade de réplica" para linhas: d = padrão, f = todas as colunas, i = índice e n = nada.

    Para verificar se uma tabela tem uma restrição de índice que pode ser usada como uma identidade de réplica, execute o seguinte:

    SELECT quote_ident(nspname) || '.' || quote_ident(relname) AS name, con.ri AS keys, CASE relreplident WHEN 'd' THEN 'default' WHEN 'n' THEN 'nothing' WHEN 'f' THEN 'full' WHEN 'i' THEN 'index' END AS replica_identity FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid, LATERAL (SELECT array_agg(contype) AS ri FROM pg_constraint WHERE conrelid = c.oid) con WHERE relkind = 'r' AND nspname NOT IN ('pg_catalog', 'information_schema', 'monitor', 'repack', 'pg_toast') ORDER BY 2,3;
  • Comando para alterar uma identidade de réplica

    A identidade da réplica de uma tabela pode ser alterada usando AALTER TABLE.

    ALTER TABLEtable_nameREPLICA IDENTITY { DEFAULT | USING INDEXindex_name | FULL | NOTHING};-- There are four forms: ALTER TABLE t_normal REPLICA IDENTITY DEFAULT; -- The primary key is used as the replica identity. If there is no primary key, the replica identity is set to FULL. ALTER TABLE t_normal REPLICA IDENTITY FULL; -- The entire row is used as the replica identity. ALTER TABLE t_normal REPLICA IDENTITY USING INDEX t_normal_v_key; -- A unique index is used as the replica identity. ALTER TABLE t_normal REPLICA IDENTITY NOTHING; -- No replica identity is set.
  • Precauções para usar identidades de réplica
    • Se uma tabela tiver uma chave primária, a identidade da réplica poderá ser definida como DEFAULT.
    • Se uma tabela não tiver uma chave primária, mas tiver um índice exclusivo não-nulo, a identidade da réplica poderá ser definida como INDEX.
    • Se uma tabela não tiver uma chave primária ou um índice exclusivo não-nulo, a identidade da réplica poderá ser definida como FULL. Isso, no entanto, é muito ineficiente e só deve ser usado como alternativa se nenhuma outra solução for possível.
    • Em todos os casos diferentes dos mencionados acima, a replicação lógica não pode ser implementada. As informações de saída são insuficientes e um erro pode ser relatado.
    • Se uma tabela com identidade de réplica "nothing" for adicionada à replicação lógica, excluir ou atualizar a tabela causará um erro no editor.

Restrições às assinaturas

  • Para garantir que os slots de failover sejam usados, os slots de failover devem ser criados no editor e associados aos slots de replicação existentes usando create_slot = false.

    CREATE SUBSCRIPTION sub1 CONNECTION 'host=192.168.0.1 port=5432 user=user1 dbname=db1' PUBLICATION pub_name with (create_slot = false,slot_name = FailoverSlot_name);

  • A replicação lógica não replica alterações DDL, portanto, as tabelas no conjunto de publicações já devem existir no assinante.
  • Várias assinaturas podem ser criadas em um determinado banco de dados. Essas assinaturas podem vir de um ou mais editores.
  • Uma determinada tabela de um assinante não pode aceitar várias publicações da mesma fonte.
  • Ao criar uma assinatura ou alterar uma assinatura, você pode usar enable para ativar a assinatura ou disable para suspender a assinatura.
  • Para excluir uma assinatura, use DROP SUBSCRIPTION. Observe que depois que uma assinatura é excluída, a tabela local e os dados não são excluídos, mas as informações upstream da assinatura não são mais recebidas.

    Se uma assinatura estiver associada a um slot de replicação, DROP SUBSCRIPTION não poderá ser executada dentro de um bloco de transação. Você pode usar ALTER SUBSCRIPTION para desassociar a assinatura do slot de replicação.

    Para excluir completamente uma assinatura, execute as seguintes etapas:

    1. Consulte o slot de replicação associado à assinatura no assinante.

      select subname,subconninfo,subslotname from pg_subscription where subname = 'sub2';

      • subname indica o nome do assinante.
      • subconninfo indica informações sobre o host remoto conectado.
      • subslotname indica o nome do slot de replicação do host remoto.
    2. No assinante, desassocie a assinatura do slot de replicação e exclua a assinatura.

      ALTER SUBSCRIPTION subname SET (slot_name = NONE);

      DROP SUBSCRIPTION subname;

    3. Exclua o slot de replicação associado no publicador.

      select pg_drop_replication_slot(' slot_name);

Referência de sintaxe

  • Publicações

    CREATE PUBLICATION é usado para criar uma publicação, DROP PUBLICATION é usado para excluir uma publicação e ALTER PUBLICATION é usado para modificar uma publicação.

    Depois que uma publicação é criada, as tabelas podem ser adicionadas ou removidas dinamicamente usando ALTER PUBLICATION. Tais operações são todas transacionais.

  • Assinaturas

    CREATE SUBSCRIPTION é usado para criar uma assinatura, DROP SUBSCRIPTION é usado para excluir uma assinatura e ALTER SUBSCRIPTION é usado para modificar uma assinatura.

    Depois de criar uma assinatura, você pode usar ALTER SUBSCRIPTION para suspender ou retomar a assinatura a qualquer momento. Excluir e recriar uma assinatura resulta na perda de informações sincronizadas, o que significa que os dados relacionados precisam ser sincronizados novamente.

Para mais detalhes, consulte a documentação oficial. O PostgreSQL 13 é usado como exemplo.

Usamos cookies para aprimorar nosso site e sua experiência. Ao continuar a navegar em nosso site, você aceita nossa política de cookies. Saiba mais

Feedback

Feedback

Feedback

0/500

Conteúdo selecionado

Envie o conteúdo selecionado com o feedback