{"id":52076,"date":"2022-08-11T09:36:45","date_gmt":"2022-08-11T12:36:45","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=52076&#038;preview=true&#038;preview_id=52076"},"modified":"2023-08-22T04:49:09","modified_gmt":"2023-08-22T07:49:09","slug":"replicacao-postgresql","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/","title":{"rendered":"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado"},"content":{"rendered":"<p>Como qualquer propriet\u00e1rio de site lhe dir\u00e1, a perda de dados e o tempo de inatividade, mesmo em doses m\u00ednimas, podem ser catastr\u00f3ficos. Eles podem atingir o despreparado a qualquer momento, levando \u00e0 redu\u00e7\u00e3o da produtividade, acessibilidade e confian\u00e7a no produto.<\/p>\n<p>A fim de proteger a integridade do seu site, \u00e9 essencial ter prote\u00e7\u00f5es contra a possibilidade de paradas ou perda de dados.<\/p>\n<p>\u00c9 a\u00ed que entra a replica\u00e7\u00e3o de dados.<\/p>\n\n<p>A replica\u00e7\u00e3o de dados \u00e9 um processo de backup automatizado no qual seus dados s\u00e3o repetidamente copiados de seu banco de dados principal para outro local remoto para serem mantidos em seguran\u00e7a. \u00c9 uma tecnologia integral para qualquer site ou aplicativo rodando um servidor de <a href=\"https:\/\/kinsta.com\/pt\/blog\/banco-de-dados-wordpress\/\">banco de dados<\/a>. Voc\u00ea tamb\u00e9m pode aproveitar o banco de dados replicado para processar SQL somente leitura, permitindo que mais processos sejam executados dentro do sistema.<\/p>\n<p>A configura\u00e7\u00e3o da replica\u00e7\u00e3o entre duas bases de dados oferece toler\u00e2ncia a falhas contra contratempos inesperados. \u00c9 considerada a melhor estrat\u00e9gia para se atingir alta disponibilidade durante desastres.<\/p>\n<p>Neste artigo, vamos mergulhar nas diferentes estrat\u00e9gias que podem ser implementadas pelos <a href=\"https:\/\/kinsta.com\/pt\/blog\/desenvolvedor-backend\/\">desenvolvedores backend<\/a> para a replica\u00e7\u00e3o sem problemas do PostgreSQL.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>O que \u00e9 replica\u00e7\u00e3o PostgreSQL?<\/h2>\n<figure id=\"attachment_128034\" aria-describedby=\"caption-attachment-128034\" style=\"width: 945px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128034 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/PostgreSQL-Replication-Illustration.png\" alt=\"Ilustra\u00e7\u00e3o da replica\u00e7\u00e3o do PostgreSQL\" width=\"945\" height=\"310\"><figcaption id=\"caption-attachment-128034\" class=\"wp-caption-text\">Ilustra\u00e7\u00e3o da replica\u00e7\u00e3o do PostgreSQL (Fonte de imagem: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<p>A replica\u00e7\u00e3o PostgreSQL \u00e9 definida como o processo de c\u00f3pia de dados de um servidor de <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-postgresql\/\">banco de dados PostgreSQL<\/a> para outro servidor. O servidor de banco de dados de origem tamb\u00e9m \u00e9 conhecido como servidor &#8220;prim\u00e1rio&#8221;, enquanto o servidor de banco de dados que recebe os dados copiados \u00e9 conhecido como servidor &#8220;r\u00e9plica&#8221;.<\/p>\n<p>O banco de dados PostgreSQL segue um modelo de replica\u00e7\u00e3o simples, onde todas as escritas v\u00e3o para um node prim\u00e1rio. O node prim\u00e1rio pode ent\u00e3o aplicar estas mudan\u00e7as e transmiti-las para o node secund\u00e1rio.<\/p>\n<h3>O que \u00e9 Failover autom\u00e1tico?<\/h3>\n<p>Failover \u00e9 um m\u00e9todo para <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial\">recuperar dados se o servidor prim\u00e1rio ceder<\/a> por qualquer raz\u00e3o. Desde que voc\u00ea tenha configurado o PostreSQL para gerenciar sua replica\u00e7\u00e3o f\u00edsica de streaming, voc\u00ea &#8211; e seus usu\u00e1rios &#8211; estar\u00e3o protegidos do tempo de inatividade devido a um snafu do servidor prim\u00e1rio.<\/p>\n<p>Note que o processo de failover pode levar algum tempo para ser configurado e iniciado. N\u00e3o h\u00e1 ferramentas integradas para monitorar e escanear falhas de servidor no PostgreSQL, ent\u00e3o voc\u00ea precisar\u00e1 ser criativo.<\/p>\n<p>Felizmente, voc\u00ea n\u00e3o precisa ser dependente do PostgreSQL para o failover. Existem ferramentas dedicadas que permitem o failover autom\u00e1tico e a comuta\u00e7\u00e3o autom\u00e1tica para o modo standby, reduzindo o <a href=\"https:\/\/kinsta.com\/pt\/blog\/solucionar-reparar-problemas-banco-dados\/\">tempo de inatividade do banco de dados<\/a>.<\/p>\n<p>Ao configurar a replica\u00e7\u00e3o de failover, voc\u00ea garante uma alta disponibilidade, garantindo que os standbys estejam dispon\u00edveis se o servidor prim\u00e1rio algum dia falhar.<\/p>\n<h2>Benef\u00edcios de usar a replica\u00e7\u00e3o PostgreSQL<\/h2>\n<p>Aqui est\u00e3o alguns dos principais benef\u00edcios de alavancar a replica\u00e7\u00e3o do PostgreSQL:<\/p>\n<ul>\n<li><strong>Migra\u00e7\u00e3o de dados:<\/strong> Voc\u00ea pode aproveitar a replica\u00e7\u00e3o PostgreSQL para migra\u00e7\u00e3o de dados atrav\u00e9s de uma mudan\u00e7a no hardware do servidor de banco de dados ou atrav\u00e9s da implanta\u00e7\u00e3o do sistema.<\/li>\n<li><strong>Toler\u00e2ncia a falhas:<\/strong> Se o servidor prim\u00e1rio falhar, o servidor standby pode agir como um servidor porque os dados contidos tanto para o servidor prim\u00e1rio quanto para o standby s\u00e3o os mesmos.<\/li>\n<li><strong>Desempenho do processamento transacional online (OLTP):<\/strong> Voc\u00ea pode melhorar o tempo de processamento de transa\u00e7\u00f5es e o tempo de consulta de um sistema OLTP, removendo a carga de consulta de relat\u00f3rios. O tempo de processamento da transa\u00e7\u00e3o \u00e9 a dura\u00e7\u00e3o que leva para que uma determinada consulta seja executada antes que uma transa\u00e7\u00e3o seja conclu\u00edda.<\/li>\n<li><strong>Teste do sistema em paralelo:<\/strong> Ao atualizar um novo sistema, voc\u00ea precisa ter certeza de que o sistema funciona bem com os dados existentes, da\u00ed a necessidade de testar com uma c\u00f3pia do banco de dados de produ\u00e7\u00e3o antes da implanta\u00e7\u00e3o.<\/li>\n<\/ul>\n<h2>Como funciona a replica\u00e7\u00e3o PostgreSQL<\/h2>\n<p>Em geral, as pessoas acreditam que quando voc\u00ea est\u00e1 se envolvendo com uma arquitetura prim\u00e1ria e secund\u00e1ria, s\u00f3 h\u00e1 uma maneira de <a href=\"https:\/\/kinsta.com\/pt\/blog\/backup-site-wordpress\/\">configurar backups<\/a> e replica\u00e7\u00e3o. As implementa\u00e7\u00f5es do PostgreSQL, no entanto, podem seguir <a href=\"https:\/\/www.citusdata.com\/blog\/2018\/02\/21\/three-approaches-to-postgresql-replication\/\">qualquer um desses tr\u00eas m\u00e9todos<\/a>:<\/p>\n<ol>\n<li><strong>Replica\u00e7\u00e3o em fluxo cont\u00ednuo:<\/strong> Replica dados do node prim\u00e1rio para o secund\u00e1rio, depois copia dados para o Amazon S3 ou Azure Blob para armazenamento de backup.<\/li>\n<li><strong>Replica\u00e7\u00e3o em n\u00edvel de volume:<\/strong> Replica dados na camada de armazenamento, come\u00e7ando do node prim\u00e1rio para o secund\u00e1rio, depois copia os dados para o Amazon S3 ou Azure Blob para armazenamento de backup.<\/li>\n<li><strong>Backups incrementais:<\/strong> Replica dados do node prim\u00e1rio enquanto constr\u00f3i um novo node secund\u00e1rio do armazenamento do Amazon S3 ou do Azure Blob, permitindo o streaming diretamente do node prim\u00e1rio.<\/li>\n<\/ol>\n<h3>M\u00e9todo 1: Streaming<\/h3>\n<p>A replica\u00e7\u00e3o do PostgreSQL tamb\u00e9m conhecida como replica\u00e7\u00e3o WAL pode ser configurada perfeitamente ap\u00f3s a instala\u00e7\u00e3o do PostgreSQL em todos os servidores. Esta abordagem de replica\u00e7\u00e3o \u00e9 baseada em mover os arquivos WAL do banco de dados prim\u00e1rio para o banco de dados alvo.<\/p>\n<p>Voc\u00ea pode implementar a replica\u00e7\u00e3o do PostgreSQL atrav\u00e9s de uma configura\u00e7\u00e3o prim\u00e1ria secund\u00e1ria. O servidor prim\u00e1rio \u00e9 a inst\u00e2ncia principal que lida com o banco de dados prim\u00e1rio e todas as suas opera\u00e7\u00f5es. O servidor secund\u00e1rio atua como inst\u00e2ncia suplementar e executa todas as mudan\u00e7as feitas no banco de dados prim\u00e1rio em si mesmo, gerando uma c\u00f3pia id\u00eantica no processo. O servidor prim\u00e1rio \u00e9 o servidor de leitura\/grava\u00e7\u00e3o enquanto o servidor secund\u00e1rio \u00e9 meramente de leitura.<\/p>\n<p>Para este m\u00e9todo, voc\u00ea precisa configurar tanto o node prim\u00e1rio quanto o node de espera. As se\u00e7\u00f5es seguintes ir\u00e3o elucidar os passos envolvidos na configura\u00e7\u00e3o deles com facilidade.<\/p>\n<h4>Configurando o Node prim\u00e1rio<\/h4>\n<p>Voc\u00ea pode configurar o node prim\u00e1rio para replica\u00e7\u00e3o de streaming, executando os seguintes passos:<\/p>\n<h5>Passo 1: Inicialize o banco de dados<\/h5>\n<p>Para <strong>inicializar o banco de dados<\/strong>, voc\u00ea pode utilizar o comando utilit\u00e1rio <code>initdb<\/code>. Em seguida, voc\u00ea pode criar um novo usu\u00e1rio com privil\u00e9gios de replica\u00e7\u00e3o, utilizando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'example_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'example_password';<\/code><\/pre>\n<p>O usu\u00e1rio ter\u00e1 que fornecer uma senha e um nome de usu\u00e1rio para a consulta em quest\u00e3o. A palavra-chave de replica\u00e7\u00e3o \u00e9 usada para dar ao usu\u00e1rio os privil\u00e9gios necess\u00e1rios. Um exemplo de consulta seria algo parecido com isto:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'rep_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_password';<\/code><\/pre>\n<h5>Passo 2: Configure as propriedades do Streaming<\/h5>\n<p>A seguir, voc\u00ea pode configurar as propriedades de streaming com o arquivo de configura\u00e7\u00e3o do PostgreSQL (<strong>postgresql.conf<\/strong>) que pode ser modificado da seguinte forma:<\/p>\n<pre><code class=\"bash\">wal_level = logical\nwal_log_hints = on\nmax_wal_senders = 8\nmax_wal_size = 1GB\nhot_standby = on<\/code><\/pre>\n<p>Aqui est\u00e1 um pequeno fundo em torno dos par\u00e2metros usados no trecho anterior:<\/p>\n<ul>\n<li><strong><code>wal_log_hints<\/code>:<\/strong> Este par\u00e2metro \u00e9 necess\u00e1rio para a capacidade <code>pg_rewind<\/code> que vem a calhar quando o servidor standby est\u00e1 fora de sincronia com o servidor prim\u00e1rio.<\/li>\n<li><strong><code>wal_level<\/code>:<\/strong> Voc\u00ea pode usar este par\u00e2metro para habilitar a replica\u00e7\u00e3o de fluxo do PostgreSQL, com poss\u00edveis valores incluindo <code>minimal<\/code>, <code>replica<\/code>, ou <code>logical<\/code>.<\/li>\n<li><strong><code>max_wal_size<\/code>:<\/strong> Isto pode ser usado para especificar o tamanho dos arquivos WAL que podem ser retidos em arquivos de log.<\/li>\n<li><strong><code>hot_standby<\/code>:<\/strong> Voc\u00ea pode utilizar este par\u00e2metro para uma conex\u00e3o de leitura com o secund\u00e1rio quando ele estiver definido como ON.<\/li>\n<li><strong><code>max_wal_senders<\/code>:<\/strong> Voc\u00ea pode usar <code>max_wal_senders<\/code> para especificar o n\u00famero m\u00e1ximo de conex\u00f5es simult\u00e2neas que podem ser estabelecidas com os servidores standby.<\/li>\n<\/ul>\n<h5>Passo 3: Criando nova entrada<\/h5>\n<p>Ap\u00f3s voc\u00ea ter modificado os par\u00e2metros no arquivo <strong>postgresql.conf<\/strong>, uma nova entrada de replica\u00e7\u00e3o no arquivo <strong>pg_hba.conf<\/strong> pode permitir que os servidores estabele\u00e7am uma conex\u00e3o uns com os outros para replica\u00e7\u00e3o.<\/p>\n<p>Voc\u00ea geralmente pode encontrar este arquivo no diret\u00f3rio de dados do PostgreSQL. Voc\u00ea pode usar o seguinte trecho de c\u00f3digo para o mesmo:<\/p>\n<pre><code class=\"language-bash\">host replication rep_user IPaddress md5<\/code><\/pre>\n<p>Uma vez que o trecho de c\u00f3digo \u00e9 executado, o servidor prim\u00e1rio permite que um usu\u00e1rio chamado <code>rep_user<\/code> se conecte e atue como servidor de espera, usando o IP especificado para replica\u00e7\u00e3o. Por exemplo, o IP especificado para replica\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-bash\">host replication rep_user 192.168.0.22\/32 md5<\/code><\/pre>\n<h4>Configurando o node de espera<\/h4>\n<p>Para configurar o node de espera para replica\u00e7\u00e3o de streaming, siga estes passos:<\/p>\n<h5>Passo 1: Backup do node prim\u00e1rio<\/h5>\n<p>Para configurar o node de espera, utilize o utilit\u00e1rio <code>pg_basebackup<\/code> para gerar um backup do node prim\u00e1rio. Isto servir\u00e1 como um ponto de partida para o node de espera. Voc\u00ea pode usar este utilit\u00e1rio com a seguinte sintaxe:<\/p>\n<pre><code class=\"language-bash\">pg_basebackp -D  -h  -X stream -c fast -U rep_user -W<\/code><\/pre>\n<p>Os par\u00e2metros usados na sintaxe mencionada acima s\u00e3o os seguintes:<\/p>\n<ul>\n<li><strong><code>-h<\/code>:<\/strong> Voc\u00ea pode usar isto para mencionar o host prim\u00e1rio.<\/li>\n<li><strong><code>-D<\/code>:<\/strong> Este par\u00e2metro indica o diret\u00f3rio no qual voc\u00ea est\u00e1 trabalhando atualmente.<\/li>\n<li><strong><code>-C<\/code>:<\/strong> Voc\u00ea pode usar isto para definir os pontos de verifica\u00e7\u00e3o.<\/li>\n<li><strong><code>-X<\/code>:<\/strong> Este par\u00e2metro pode ser usado para incluir os arquivos de log transacional necess\u00e1rios.<\/li>\n<li><strong><code>-W<\/code>:<\/strong> Voc\u00ea pode usar este par\u00e2metro para solicitar ao usu\u00e1rio uma senha antes de criar um link para o banco de dados.<\/li>\n<\/ul>\n<h5>Passo 2: Prepare o arquivo de configura\u00e7\u00e3o da replica\u00e7\u00e3o<\/h5>\n<p>A seguir, voc\u00ea precisa verificar se o arquivo de configura\u00e7\u00e3o da replica\u00e7\u00e3o existe. Se n\u00e3o existir, voc\u00ea pode gerar o arquivo de configura\u00e7\u00e3o de replica\u00e7\u00e3o como <strong>recovery.conf<\/strong>.<\/p>\n<p>Voc\u00ea deve criar este arquivo no diret\u00f3rio de dados da instala\u00e7\u00e3o do PostgreSQL. Voc\u00ea pode ger\u00e1-lo automaticamente usando a op\u00e7\u00e3o <code>-R<\/code> dentro do utilit\u00e1rio <code>pg_basebackup<\/code>.<\/p>\n<p>O arquivo <strong>recovery.conf<\/strong> deve conter os seguintes comandos:<\/p>\n<pre><code class=\"bash\">standby_mode = 'on'<\/code> <code>primary_conninfo = 'host=&lt;master host&gt; port=&lt;postgres_port&gt; user=&lt;replication_user&gt; password=&lt;password&gt; application_name=\"host_name\"''<\/code> <code>recovery_target_timeline = 'latest' (mais recente)<\/code><\/pre>\n<p>Os par\u00e2metros usados nos comandos acima s\u00e3o os seguintes:<\/p>\n<ul>\n<li><strong><code>primary_conninfo<\/code>:<\/strong> Voc\u00ea pode usar isto para fazer uma conex\u00e3o entre os servidores prim\u00e1rio e secund\u00e1rio, alavancando uma cadeia de conex\u00e3o.<\/li>\n<li><strong><code>standby_mode<\/code>:<\/strong> Este par\u00e2metro pode fazer com que o servidor prim\u00e1rio comece como standby quando ligado.<\/li>\n<li><strong><code>recovery_target_timeline<\/code>:<\/strong> Voc\u00ea pode usar isto para definir o tempo de recupera\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>Para configurar uma conex\u00e3o, voc\u00ea precisa fornecer o nome de usu\u00e1rio, endere\u00e7o IP e senha como valores para o par\u00e2metro primary_conninfo. Por exemplo:<\/p>\n<pre><code class=\"language-bash\">primary_conninfo = 'host=192.168.0.26 port=5432 user=rep_user password=rep_pass'<\/code><\/pre>\n<h5>Passo 3: Reinicie o servidor secund\u00e1rio<\/h5>\n<p>Finalmente, voc\u00ea pode reiniciar o servidor secund\u00e1rio para completar o processo de configura\u00e7\u00e3o.<\/p>\n<p>No entanto, a replica\u00e7\u00e3o do streaming vem com v\u00e1rios desafios, como por exemplo:<\/p>\n<ul>\n<li>V\u00e1rios clientes PostgreSQL (escritos em diferentes linguagens de programa\u00e7\u00e3o) conversam com um \u00fanico endpoint. Quando o node prim\u00e1rio falha, estes clientes continuar\u00e3o tentando novamente o mesmo DNS ou nome IP. Isto torna o failover vis\u00edvel para a aplica\u00e7\u00e3o.<\/li>\n<li>A replica\u00e7\u00e3o do PostgreSQL n\u00e3o vem com failover e monitoramento embutidos. Quando o node prim\u00e1rio falhar, voc\u00ea precisa promover um secund\u00e1rio para ser o novo prim\u00e1rio. Esta promo\u00e7\u00e3o precisa ser executada de forma que os clientes escrevam para apenas um node prim\u00e1rio, e eles n\u00e3o observem inconsist\u00eancias de dados.<\/li>\n<li>O PostgreSQL replica todo o seu estado. Quando voc\u00ea precisa desenvolver um novo node secund\u00e1rio, o secund\u00e1rio precisa recapitular todo o hist\u00f3rico de mudan\u00e7a de estado do node prim\u00e1rio, o que \u00e9 intensivo em recursos e torna caro eliminar os node na cabe\u00e7a e criar novos.<\/li>\n<\/ul>\n<h3>M\u00e9todo 2: Dispositivo de bloco replicado<\/h3>\n<p>O m\u00e9todo do dispositivo de bloco replicado depende do espelhamento de disco (tamb\u00e9m conhecido como replica\u00e7\u00e3o de volume). Nesta abordagem, as mudan\u00e7as s\u00e3o escritas em um volume persistente que \u00e9 espelhado de forma s\u00edncrona em outro volume.<\/p>\n<p>O benef\u00edcio adicional deste m\u00e9todo \u00e9 sua compatibilidade e durabilidade de dados em ambientes de nuvem com todos os bancos de dados relacionais, incluindo PostgreSQL, MySQL, e <a href=\"https:\/\/kinsta.com\/pt\/blog\/postgresql-vs-sql-server\/\">SQL Server<\/a>, para citar alguns.<\/p>\n<p>Entretanto, a abordagem de espelhamento em disco da replica\u00e7\u00e3o do PostgreSQL precisa que voc\u00ea replique tanto o log WAL quanto os dados da tabela. J\u00e1 que cada um escreve no banco de dados agora precisa passar pela rede de forma s\u00edncrona, voc\u00ea n\u00e3o pode se dar ao luxo de perder um \u00fanico byte, pois isso poderia deixar seu banco de dados em um estado corrupto.<\/p>\n<p>Este m\u00e9todo \u00e9 normalmente alavancada usando o Azure PostgreSQL e o Amazon RDS.<\/p>\n<h3>M\u00e9todo 3: WAL<\/h3>\n<p>WAL consiste de arquivos de segmento (16 MB por padr\u00e3o). Cada segmento tem um ou mais registros. Um log sequence record (LSN) \u00e9 um ponteiro para um registro no WAL, deixando voc\u00ea saber a posi\u00e7\u00e3o\/localiza\u00e7\u00e3o onde o registro foi salvo no arquivo de registro.<\/p>\n<p>Um servidor standby utiliza segmentos WAL &#8211; tamb\u00e9m conhecido como XLOGS na terminologia do PostgreSQL &#8211; para replicar continuamente as mudan\u00e7as de seu servidor prim\u00e1rio. Voc\u00ea pode usar o registro write-ahead para garantir durabilidade e atomicidade em um SGBD atrav\u00e9s da serializa\u00e7\u00e3o de peda\u00e7os de dados de byte-array (cada um com um LSN \u00fanico) para armazenamento est\u00e1vel antes que eles sejam aplicados a um banco de dados.<\/p>\n<p>A aplica\u00e7\u00e3o de uma muta\u00e7\u00e3o em um banco de dados pode levar a v\u00e1rias opera\u00e7\u00f5es de sistema de arquivos. Uma quest\u00e3o pertinente que surge \u00e9 como um banco de dados pode assegurar atomicidade no caso de uma falha no servidor devido a uma queda de energia enquanto ele est\u00e1 no meio de uma atualiza\u00e7\u00e3o do sistema de arquivos. Quando um banco de dados inicia, ele inicia um processo de inicializa\u00e7\u00e3o ou replay que pode ler os segmentos WAL dispon\u00edveis e os compara com o LSN armazenado em cada p\u00e1gina de dados (cada p\u00e1gina de dados \u00e9 marcada com o LSN do \u00faltimo registro WAL que afeta a p\u00e1gina).<\/p>\n<h4>Replica\u00e7\u00e3o baseada no envio de logs (n\u00edvel de bloco)<\/h4>\n<p>A replica\u00e7\u00e3o em fluxo refina o processo de envio de log. Ao contr\u00e1rio de esperar pela chave WAL, os registros s\u00e3o enviados \u00e0 medida que s\u00e3o criados, diminuindo assim o atraso de replica\u00e7\u00e3o.<\/p>\n<p>A replica\u00e7\u00e3o em fluxo cont\u00ednuo tamb\u00e9m supera o envio de logs porque o servidor standby se conecta com o servidor prim\u00e1rio atrav\u00e9s da rede, alavancando um protocolo de replica\u00e7\u00e3o. O servidor prim\u00e1rio pode ent\u00e3o enviar registros WAL diretamente sobre esta conex\u00e3o sem ter que depender de scripts fornecidos pelo usu\u00e1rio final.<\/p>\n<h4>Replica\u00e7\u00e3o baseada no envio de logs (n\u00edvel de arquivo)<\/h4>\n<p>O envio de logs \u00e9 definido como c\u00f3pia de arquivos de log para outro servidor PostgreSQL para gerar outro servidor standby atrav\u00e9s da reprodu\u00e7\u00e3o de arquivos WAL. Este servidor \u00e9 configurado para trabalhar em modo de recupera\u00e7\u00e3o, e seu \u00fanico prop\u00f3sito \u00e9 aplicar quaisquer novos arquivos WAL conforme eles aparecem.<\/p>\n<p>Este servidor secund\u00e1rio ent\u00e3o se torna um backup quente do servidor prim\u00e1rio do PostgreSQL. Ele tamb\u00e9m pode ser configurado para ser uma r\u00e9plica lida, onde ele pode oferecer consultas somente leitura, tamb\u00e9m chamada de hot standby.<\/p>\n<h4>Arquivamento WAL Cont\u00ednuo<\/h4>\n<p>A duplica\u00e7\u00e3o de arquivos WAL como eles s\u00e3o criados em qualquer local que n\u00e3o seja o subdiret\u00f3rio <code>pg_wal<\/code> para arquiv\u00e1-los \u00e9 conhecida como arquivamento WAL. PostgreSQL ir\u00e1 chamar um script dado pelo usu\u00e1rio para arquivamento, cada vez que um arquivo WAL for criado.<\/p>\n<p>O script pode aproveitar o comando <code>scp<\/code> para duplicar o arquivo para um ou mais locais, como uma montagem NFS. Uma vez arquivados, os arquivos do segmento WAL podem ser alavancados para recuperar o banco de dados em qualquer ponto no tempo.<\/p>\n<p>Outras configura\u00e7\u00f5es baseadas em log incluem:<\/p>\n<ul>\n<li><strong>Replica\u00e7\u00e3o s\u00edncrona:<\/strong> Antes de cada transa\u00e7\u00e3o de replica\u00e7\u00e3o s\u00edncrona ser comprometida, o servidor prim\u00e1rio espera at\u00e9 que os standbys confirmem que eles receberam os dados. O benef\u00edcio desta configura\u00e7\u00e3o \u00e9 que n\u00e3o haver\u00e1 conflitos causados devido a processos de escrita paralelos.<\/li>\n<li><strong>Replica\u00e7\u00e3o s\u00edncrona multi-mester:<\/strong> Aqui, cada servidor pode aceitar solicita\u00e7\u00f5es de escrita, e os dados modificados s\u00e3o transmitidos do servidor original para todos os outros servidores antes de cada transa\u00e7\u00e3o ser comprometida. Ele aproveita o protocolo 2PC e adere \u00e0 regra do &#8220;tudo ou nada&#8221;.<\/li>\n<\/ul>\n<h4>Detalhes do protocolo WAL Streaming<\/h4>\n<p>Um processo conhecido como receptor WAL, rodando no servidor standby, aproveita os detalhes da conex\u00e3o fornecidos no par\u00e2metro de <strong>recovery.conf<\/strong> <code>primary_conninfo<\/code> e se conecta ao servidor prim\u00e1rio alavancando uma conex\u00e3o TCP\/IP.<\/p>\n<p>Para iniciar a replica\u00e7\u00e3o do streaming, o frontend pode enviar o par\u00e2metro de replica\u00e7\u00e3o dentro da mensagem de inicializa\u00e7\u00e3o. Um valor booleano de verdadeiro, sim, 1, ou ON permite ao <a href=\"https:\/\/kinsta.com\/pt\/blog\/salario-desenvolvedor-backend\/\">backend<\/a> saber que ele precisa entrar no modo walsender de replica\u00e7\u00e3o f\u00edsica.<\/p>\n<p>O WAL sender \u00e9 outro processo que roda no servidor prim\u00e1rio e est\u00e1 encarregado de enviar os registros WAL para o servidor de espera \u00e0 medida que eles s\u00e3o gerados. O receptor WAL salva os registros WAL no WAL como se eles fossem criados pela atividade do cliente de clientes conectados localmente.<\/p>\n<p>Assim que os registros WAL chegam aos arquivos do segmento WAL, o servidor de espera continua constantemente reproduzindo o WAL para que o prim\u00e1rio e o de espera estejam atualizados.<\/p>\n<figure id=\"attachment_128035\" aria-describedby=\"caption-attachment-128035\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128035 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/WAL-Streaming-Protocol-Details.png\" alt=\"Diagrama de fluxo do Protocolo WAL Streaming\" width=\"1024\" height=\"1020\"><figcaption id=\"caption-attachment-128035\" class=\"wp-caption-text\">Diagrama de fluxo do Protocolo WAL Streaming (Fonte de imagem: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<h2>Elementos da replica\u00e7\u00e3o do PostgreSQL<\/h2>\n<p>Nesta se\u00e7\u00e3o, voc\u00ea ter\u00e1 uma compreens\u00e3o mais profunda dos modelos comumente utilizados (replica\u00e7\u00e3o single-master e multi-master), tipos (replica\u00e7\u00e3o f\u00edsica e l\u00f3gica) e modos (s\u00edncrono e ass\u00edncrono) de replica\u00e7\u00e3o PostgreSQL.<\/p>\n<h3>Modelos de replica\u00e7\u00e3o do banco de dados PostgreSQL<\/h3>\n<p>Escalabilidade significa adicionar mais recursos\/ hardware aos nodes existentes para aumentar a capacidade do banco de dados de armazenar e processar mais dados que podem ser alcan\u00e7ados horizontal e verticalmente. A replica\u00e7\u00e3o do PostgreSQL \u00e9 um exemplo de escalabilidade horizontal que \u00e9 muito mais dif\u00edcil de implementar do que a escalabilidade vertical. N\u00f3s podemos alcan\u00e7ar escalabilidade horizontal principalmente pela replica\u00e7\u00e3o de um single-master (SMR) e replica\u00e7\u00e3o multi-master (MMR).<\/p>\n<p>A replica\u00e7\u00e3o multi-master permite que os dados sejam modificados somente em um \u00fanico node, e estas modifica\u00e7\u00f5es s\u00e3o replicadas em um ou mais nodes. As tabelas replicadas no banco de dados de r\u00e9plicas n\u00e3o t\u00eam permiss\u00e3o para aceitar quaisquer altera\u00e7\u00f5es, exceto aquelas do servidor prim\u00e1rio. Mesmo que aceitem, as altera\u00e7\u00f5es n\u00e3o s\u00e3o replicadas de volta ao servidor prim\u00e1rio.<\/p>\n<p>Na maioria das vezes, o SMR \u00e9 suficiente para a aplica\u00e7\u00e3o porque \u00e9 menos complicado de configurar e gerenciar, sem chances de conflitos. A replica\u00e7\u00e3o de um single-master tamb\u00e9m \u00e9 unidirecional, uma vez que os dados de replica\u00e7\u00e3o fluem em uma dire\u00e7\u00e3o principalmente, do banco de dados prim\u00e1rio para o banco de dados de r\u00e9plicas.<\/p>\n<p>Em alguns casos, SMR sozinho pode n\u00e3o ser suficiente, e voc\u00ea pode precisar implementar MMR. O MMR permite que mais de um node aja como o node prim\u00e1rio. Mudan\u00e7as nas linhas da tabela em mais de um banco de dados prim\u00e1rio designado s\u00e3o replicadas para suas tabelas contrapartes em todos os outros bancos de dados prim\u00e1rios. Neste modelo, esquemas de resolu\u00e7\u00e3o de conflitos s\u00e3o frequentemente empregados para evitar problemas como duplica\u00e7\u00e3o de chaves prim\u00e1rias.<\/p>\n<p>H\u00e1 algumas vantagens no uso do MMR, a saber:<\/p>\n<ul>\n<li>No caso de falha do host, outros hosts ainda podem dar servi\u00e7os de atualiza\u00e7\u00e3o e inser\u00e7\u00e3o.<\/li>\n<li>Os n\u00f3s prim\u00e1rios est\u00e3o espalhados em v\u00e1rios locais diferentes, ent\u00e3o a chance de falha de todos os n\u00f3s prim\u00e1rios \u00e9 muito pequena.<\/li>\n<li>Capacidade de empregar uma rede de \u00e1rea ampla (WAN) de bancos de dados prim\u00e1rios que podem estar geograficamente pr\u00f3ximos a grupos de clientes, mas mantendo a consist\u00eancia dos dados em toda a rede.<\/li>\n<\/ul>\n<p>Entretanto, o lado negativo da implementa\u00e7\u00e3o do MMR \u00e9 a complexidade e sua dificuldade para resolver conflitos.<\/p>\n<p>V\u00e1rios ramos e aplica\u00e7\u00f5es fornecem solu\u00e7\u00f5es MMR, pois o PostgreSQL n\u00e3o o suporta nativamente. Estas solu\u00e7\u00f5es podem ser <a href=\"https:\/\/kinsta.com\/pt\/blog\/banco-de-dados-de-codigo-aberto\/\">open-source<\/a>, gratuitas ou pagas. Uma dessas <a href=\"https:\/\/kinsta.com\/pt\/blog\/plugin-banco-de-dados-wordpress\/\">extens\u00f5es<\/a> \u00e9 a replica\u00e7\u00e3o bidirecional (BDR) que \u00e9 ass\u00edncrona e \u00e9 baseada na fun\u00e7\u00e3o de decodifica\u00e7\u00e3o l\u00f3gica do PostgreSQL.<\/p>\n<p>Como a aplica\u00e7\u00e3o BDR reproduz transa\u00e7\u00f5es em outros nodes, a opera\u00e7\u00e3o de replay pode falhar se houver um conflito entre a transa\u00e7\u00e3o sendo aplicada e a transa\u00e7\u00e3o comprometida no node receptor.<\/p>\n<h3>Tipos de replica\u00e7\u00e3o PostgreSQL<\/h3>\n<p>Existem dois tipos de replica\u00e7\u00e3o PostgreSQL: replica\u00e7\u00e3o l\u00f3gica e f\u00edsica.<\/p>\n<p>Uma simples opera\u00e7\u00e3o <em>l\u00f3gica<\/em> <code>initdb<\/code> realizaria a opera\u00e7\u00e3o f\u00edsica de criar um diret\u00f3rio base para um cluster. Da mesma forma, uma simples opera\u00e7\u00e3o <em>l\u00f3gica<\/em> <code>CREATE DATABASE<\/code>\u00a0realizaria a opera\u00e7\u00e3o <em>f\u00edsica<\/em> de cria\u00e7\u00e3o de um subdiret\u00f3rio no diret\u00f3rio base.<\/p>\n<p>A replica\u00e7\u00e3o f\u00edsica geralmente lida com arquivos e diret\u00f3rios. Ela n\u00e3o sabe o que esses arquivos e diret\u00f3rios representam. Estes m\u00e9todos s\u00e3o usados para manter uma c\u00f3pia completa dos dados completos de um \u00fanico cluster, tipicamente em outra m\u00e1quina, e s\u00e3o feitos no n\u00edvel do sistema de arquivos ou no n\u00edvel do disco e usam endere\u00e7os de bloco exatos.<\/p>\n<p>A replica\u00e7\u00e3o l\u00f3gica \u00e9 uma forma de reproduzir entidades de dados e suas modifica\u00e7\u00f5es, com base em sua identidade de replica\u00e7\u00e3o (geralmente uma chave prim\u00e1ria). Ao contr\u00e1rio da replica\u00e7\u00e3o f\u00edsica, ela lida com bancos de dados, tabelas e opera\u00e7\u00f5es de DML e \u00e9 feita em n\u00edvel de cluster de bancos de dados. Ele usa um modelo de <em>publica\u00e7\u00e3o<\/em> e <em>assinatura<\/em> onde um ou mais <em>assinantes<\/em> s\u00e3o assinantes de uma ou mais <em>publica\u00e7\u00f5es<\/em> em um node <em>editor<\/em>.<\/p>\n<p>O processo de replica\u00e7\u00e3o come\u00e7a tirando um instant\u00e2neo dos dados no banco de dados da editora e depois copiando-os para o assinante. Os assinantes retiram os dados das publica\u00e7\u00f5es que assinam e podem re-publicar os dados posteriormente para permitir replica\u00e7\u00e3o em cascata ou configura\u00e7\u00f5es mais complexas. O assinante aplica os dados na mesma ordem que o editor para que a consist\u00eancia transacional seja garantida para publica\u00e7\u00f5es dentro de uma \u00fanica assinatura, tamb\u00e9m conhecida como replica\u00e7\u00e3o transacional.<\/p>\n<p>Os casos t\u00edpicos de uso para replica\u00e7\u00e3o l\u00f3gica s\u00e3o:<\/p>\n<ul>\n<li>Envio de mudan\u00e7as incrementais em um \u00fanico banco de dados (ou um subconjunto de um banco de dados) aos assinantes \u00e0 medida que elas ocorrem.<\/li>\n<li>Compartilhar um subconjunto da base de dados entre m\u00faltiplas bases de dados.<\/li>\n<li>Acionar o disparo de mudan\u00e7as individuais \u00e0 medida que elas chegam ao assinante.<\/li>\n<li>Consolida\u00e7\u00e3o de m\u00faltiplas bases de dados em uma s\u00f3.<\/li>\n<li>Fornecendo acesso a dados replicados para diferentes grupos de usu\u00e1rios.<\/li>\n<\/ul>\n<p>O banco de dados de assinantes comporta-se da mesma forma que qualquer outra inst\u00e2ncia PostgreSQL e pode ser usado como editor para outros bancos de dados definindo suas publica\u00e7\u00f5es.<\/p>\n<p>Quando o assinante \u00e9 tratado como somente leitura por aplica\u00e7\u00e3o, n\u00e3o haver\u00e1 conflitos a partir de uma \u00fanica assinatura. Por outro lado, se houver outras escritas feitas por um aplicativo ou por outros assinantes para o mesmo conjunto de tabelas, podem surgir conflitos.<\/p>\n<p>O PostgreSQL suporta ambos os mecanismos simultaneamente. A replica\u00e7\u00e3o l\u00f3gica permite um controle fino tanto sobre a replica\u00e7\u00e3o de dados quanto sobre a seguran\u00e7a.<\/p>\n<h3>Modos de replica\u00e7\u00e3o<\/h3>\n<p>H\u00e1 principalmente dois modos de replica\u00e7\u00e3o PostgreSQL: s\u00edncrono e ass\u00edncrono. A replica\u00e7\u00e3o s\u00edncrona permite que os dados sejam escritos no servidor prim\u00e1rio e secund\u00e1rio ao mesmo tempo, enquanto a replica\u00e7\u00e3o ass\u00edncrona assegura que os dados sejam primeiro escritos no host e depois copiados para o servidor secund\u00e1rio.<\/p>\n<p>No modo de replica\u00e7\u00e3o s\u00edncrona, as transa\u00e7\u00f5es no banco de dados prim\u00e1rio s\u00e3o consideradas completas somente quando essas mudan\u00e7as tiverem sido replicadas em todas as r\u00e9plicas. Os servidores de r\u00e9plicas devem estar todos dispon\u00edveis o tempo todo para que as transa\u00e7\u00f5es sejam completadas no banco de dados prim\u00e1rio. O modo s\u00edncrono de replica\u00e7\u00e3o \u00e9 usado em ambientes transacionais high-end com requisitos de failover imediato.<\/p>\n<p>No modo ass\u00edncrono, as transa\u00e7\u00f5es no servidor prim\u00e1rio podem ser declaradas completas quando as mudan\u00e7as tiverem sido feitas apenas no servidor prim\u00e1rio. Estas mudan\u00e7as s\u00e3o ent\u00e3o replicadas nas r\u00e9plicas mais tarde no tempo. Os servidores de r\u00e9plicas podem permanecer fora da sincroniza\u00e7\u00e3o por uma certa dura\u00e7\u00e3o, chamada de lag de replica\u00e7\u00e3o. No caso de uma falha, pode ocorrer perda de dados, mas a sobrecarga fornecida pela replica\u00e7\u00e3o ass\u00edncrona \u00e9 pequena, ent\u00e3o \u00e9 aceit\u00e1vel na maioria dos casos (n\u00e3o sobrecarrega o host). O failover do banco de dados prim\u00e1rio para o banco de dados secund\u00e1rio leva mais tempo do que a replica\u00e7\u00e3o s\u00edncrona.<\/p>\n<h2>Como configurar a replica\u00e7\u00e3o do PostgreSQL<\/h2>\n<p>Para esta se\u00e7\u00e3o, estaremos demonstrando como configurar o processo de replica\u00e7\u00e3o PostgreSQL em um sistema operacional Linux. Para este exemplo, estaremos usando Ubuntu 18.04 LTS e PostgreSQL 10.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Certifique-se de ter instalado o servidor Linux Ubuntu. Os passos para instalar o PostgreSQL em um servidor Linux s\u00e3o mencionados abaixo, seguidos pela configura\u00e7\u00e3o da replica\u00e7\u00e3o no servidor prim\u00e1rio e no secund\u00e1rio.<\/p>\n<\/aside>\n\n<p>Vamos ao que interessa!<\/p>\n<h3>Instala\u00e7\u00e3o<\/h3>\n<p>Voc\u00ea vai come\u00e7ar instalando o PostgreSQL no Linux com estes passos:<\/p>\n<ol>\n<li>Primeiramente, voc\u00ea teria que importar a chave de assinatura do PostgreSQL digitando o comando abaixo no terminal:\n<pre><code class=\"language-bash\">wget -q https:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc -O- | sudo apt-key add -<\/code><\/pre>\n<\/li>\n<li>Ent\u00e3o, adicione o reposit\u00f3rio PostgreSQL digitando o comando abaixo no terminal:\n<pre><code class=\"language-bash\">echo \"deb http:\/\/apt.postgresql.org\/pub\/repos\/apt\/ bionic-pgdg main\" | sudo tee \/etc\/apt\/sources.list.d\/postgresql.list <\/code><\/pre>\n<\/li>\n<li>Atualize o \u00cdndice Reposit\u00f3rio digitando o seguinte comando no terminal:\n<pre><code class=\"language-bash\">sudo apt-get update <\/code><\/pre>\n<\/li>\n<li>Instale o pacote PostgreSQL usando o comando apt:\n<pre><code class=\"language-bash\">sudo apt-get install -y postgresql-10<\/code><\/pre>\n<\/li>\n<li>Finalmente, defina a senha para o usu\u00e1rio do PostgreSQL usando o seguinte comando:\n<pre><code class=\"language-bash\">sudo passwd postgres<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>A instala\u00e7\u00e3o do PostgreSQL \u00e9 obrigat\u00f3ria tanto para os servidores prim\u00e1rios quanto secund\u00e1rios antes de iniciar o processo de replica\u00e7\u00e3o do PostgreSQL.<\/p>\n<p>Uma vez que voc\u00ea tenha configurado o PostgreSQL em ambos os servidores, voc\u00ea pode passar para a configura\u00e7\u00e3o de replica\u00e7\u00e3o do servidor prim\u00e1rio e secund\u00e1rio.<\/p>\n<h3>Configurando a replica\u00e7\u00e3o no servidor prim\u00e1rio<\/h3>\n<p>Execute estes passos uma vez que voc\u00ea tenha instalado o PostgreSQL tanto no servidor prim\u00e1rio quanto no secund\u00e1rio.<\/p>\n<ol>\n<li>Em primeiro lugar, fa\u00e7a o login no banco de dados do PostgreSQL com o seguinte comando:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Crie um usu\u00e1rio replicador com o seguinte comando:\n<pre><code class=\"language-bash\">psql -c \"CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'YOUR_PASSWORD';\"<\/code><\/pre>\n<\/li>\n<li>Edite <strong>pg_hba.cnf<\/strong> com qualquer aplica\u00e7\u00e3o nano no Ubuntu e adicione a seguinte configura\u00e7\u00e3o:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/pg_hba.conf<\/code><\/pre>\n<p>Para configurar o arquivo, use o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">host replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>Abra e edite o <strong>postgresql.conf<\/strong> e coloque a seguinte configura\u00e7\u00e3o no servidor prim\u00e1rio:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf<\/code><\/pre>\n<p>Use as seguintes configura\u00e7\u00f5es:<strong><br \/>\n<\/strong><\/p>\n<pre><code class=\"language-bash\">listen_addresses = 'localhost,MasterIP'\nwal_level = replica\nwal_keep_segments = 64\nmax_wal_senders = 10<\/code><\/pre>\n<\/li>\n<li>Finalmente, reiniciar o PostgreSQL no servidor principal:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl restart postgresql<\/code><\/pre>\n<p>Agora voc\u00ea completou a configura\u00e7\u00e3o no servidor prim\u00e1rio.<\/p>\n<h3>Configurando a replica\u00e7\u00e3o no servidor secund\u00e1rio<\/h3>\n<p>Siga estes passos para configurar a replica\u00e7\u00e3o no servidor secund\u00e1rio:<\/p>\n<ol>\n<li>Acesse o PostgreSQL RDMS com o comando abaixo:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Pare o servi\u00e7o PostgreSQL de funcionar para que possamos trabalhar nele com o comando abaixo:\n<pre><code class=\"language-bash\">systemctl stop postgresql<\/code><\/pre>\n<\/li>\n<li>Edite o arquivo <strong>pg_hba.conf<\/strong> com este comando e adicione a seguinte configura\u00e7\u00e3o:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" command\nnano \/etc\/postgresql\/10\/main\/pg_hba.conf\n\/\/ \"Configuration\" command\nhost replication replication MasterIP\/24 md5<\/code><\/pre>\n<\/li>\n<li>Abra e edite o <strong>postgresql.conf<\/strong> no servidor secund\u00e1rio e coloque a seguinte configura\u00e7\u00e3o ou uncomment se for comentado:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf\nlisten_addresses = 'localhost,SecondaryIP'\nwal_keep_segments = 64\nwal_level = replica\nhot_standby = on\nmax_wal_senders = 10<\/code><\/pre>\n<p><strong>SecondaryIP<\/strong> \u00e9 o endere\u00e7o do servidor secund\u00e1rio<\/li>\n<li>Acesse o diret\u00f3rio de dados do PostgreSQL no servidor secund\u00e1rio e remova tudo:\n<pre><code class=\"language-bash\">cd \/var\/lib\/postgresql\/10\/main\nrm -rfv *<\/code><\/pre>\n<\/li>\n<li>Copie os arquivos do diret\u00f3rio de dados do servidor prim\u00e1rio PostgreSQL para o diret\u00f3rio de dados do servidor secund\u00e1rio PostgreSQL e escreva este comando no servidor secund\u00e1rio:\n<pre><code class=\"language-bash\">pg_basebackup -h MasterIP -D \/var\/lib\/postgresql\/11\/main\/ -P -U\nreplication --wal-method=fetch<\/code><\/pre>\n<\/li>\n<li>Digite a senha do servidor prim\u00e1rio PostgreSQL e pressione enter. A seguir, adicione o seguinte comando para a configura\u00e7\u00e3o da recupera\u00e7\u00e3o:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" Command\nnano \/var\/lib\/postgresql\/10\/main\/recovery.conf\n\/\/ Configuration\nstandby_mode = 'on'\nprimary_conninfo = 'host=MasterIP port=5432 user=replication password=YOUR_PASSWORD'\ntrigger_file = '\/tmp\/MasterNow'&lt;\/code<\/code>&gt;<\/pre>\n<p>Aqui, <code>YOUR_PASSWORD<\/code> \u00e9 a senha para o usu\u00e1rio replicador no servidor prim\u00e1rio PostgreSQL criado<\/li>\n<li>Uma vez que a senha tenha sido definida, voc\u00ea teria que reiniciar o banco de dados secund\u00e1rio do PostgreSQL desde que ele foi parado:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl start postgresql<\/code><\/pre>\n<h3>Testando sua configura\u00e7\u00e3o<\/h3>\n<p>Agora que j\u00e1 executamos os passos, vamos testar o processo de replica\u00e7\u00e3o e observar o banco de dados do servidor secund\u00e1rio. Para isso, n\u00f3s criamos uma tabela no servidor prim\u00e1rio e observamos se o mesmo \u00e9 refletido no servidor secund\u00e1rio.<\/p>\n<p>Vamos a isso.<\/p>\n<ol>\n<li>J\u00e1 que estamos criando a tabela no servidor prim\u00e1rio, voc\u00ea precisar\u00e1 fazer o login no servidor prim\u00e1rio:\n<pre><code class=\"language-bash\">su - postgres\npsql<\/code><\/pre>\n<\/li>\n<li>Agora n\u00f3s criamos uma tabela simples chamada &#8216;testtable&#8217; e inserimos dados na tabela executando as seguintes consultas do PostgreSQL no terminal:\n<pre><code class=\"language-bash\">CREATE TABLE testtable (websites varchar(100));\nINSERT INTO testtable VALUES ('section.com');\nINSERT INTO testtable VALUES ('google.com');\nINSERT INTO testtable VALUES ('github.com');<\/code><\/pre>\n<\/li>\n<li>Observe o banco de dados secund\u00e1rio do servidor PostgreSQL fazendo login no servidor secund\u00e1rio:\n<pre><code class=\"language-bash\">su - postgres psql<\/code><\/pre>\n<\/li>\n<li>Agora, n\u00f3s verificamos se a tabela &#8216;testtable&#8217; existe, e podemos retornar os dados executando as seguintes consultas do PostgreSQL no terminal. Este comando essencialmente exibe a tabela inteira.\n<pre><code class=\"language-bash\">select * from testtable;<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Esta \u00e9 a sa\u00edda da tabela de teste:<\/p>\n<pre><code class=\"language-bash\">|  websites  |\n\n-------------------\n\n| section.com |\n\n| google.com |\n\n| github.com  |\n\n--------------------<\/code><\/pre>\n<p>Voc\u00ea deve ser capaz de observar os mesmos dados que os do servidor prim\u00e1rio.<\/p>\n<p>Se voc\u00ea vir o acima, ent\u00e3o voc\u00ea realizou com sucesso o processo de replica\u00e7\u00e3o!<\/p>\n<h2>Quais s\u00e3o as etapas de failover do manual do PostgreSQL?<\/h2>\n<p>Vamos rever os passos para um failover manual do PostgreSQL:<\/p>\n<ol>\n<li>Crash no servidor prim\u00e1rio.<\/li>\n<li>Promova o servidor standby executando o seguinte comando no servidor standby:\n<pre><code class=\"language-bash\">.\/pg_ctl promote -D ..\/sb_data\/\nserver promoting<\/code><\/pre>\n<\/li>\n<li>Conecte-se ao servidor standby promovido e insira uma linha:\n<pre><code class=\"language-bash\">-bash-4.2$ .\/edb-psql -p 5432 edb\n\nPassword:\n\npsql.bin (10.7)\n\nType \"help\" <strong>for<\/strong> help.\n\nedb=# <strong>insert<\/strong> <strong>into<\/strong> abc <strong>values<\/strong>(4,'Four');\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Se o encarte funcionar bem, ent\u00e3o o standby, anteriormente um servidor somente de leitura, foi promovido como o novo servidor prim\u00e1rio.<\/p>\n<h2>Como automatizar o failover no PostgreSQL<\/h2>\n<p>Configurar o failover autom\u00e1tico \u00e9 f\u00e1cil.<\/p>\n<p>Voc\u00ea vai precisar do gerenciador de failover do EDB PostgreSQL (EFM). Ap\u00f3s baixar e instalar o EFM em cada node prim\u00e1rio e de espera, voc\u00ea pode criar um Cluster EFM, que consiste de um node prim\u00e1rio, um ou mais nodes de espera e um node de testemunha opcional que confirma as afirma\u00e7\u00f5es em caso de falha.<\/p>\n<p>A EFM monitora continuamente a sa\u00fade do sistema e envia alertas por e-mail com base nos eventos do sistema. Quando ocorre uma falha, ele muda automaticamente para o standby mais atualizado e reconfigura todos os outros servidores standby para reconhecer o novo node prim\u00e1rio.<\/p>\n<p>Ele tamb\u00e9m reconfigura os balanceadores de carga (como o pgPool) e evita a ocorr\u00eancia de &#8220;split-brain&#8221; (quando dois n\u00f3s pensam que cada um deles \u00e9 prim\u00e1rio).<\/p>\n<h2>Resumo<\/h2>\n<p>Devido \u00e0 alta quantidade de dados, escalabilidade e seguran\u00e7a tornaram-se dois dos crit\u00e9rios mais importantes no <a href=\"https:\/\/kinsta.com\/pt\/hospedagem-wordpress\/dedicado\/\">gerenciamento de bancos de dados<\/a>, especialmente em um ambiente de transa\u00e7\u00e3o. Embora possamos melhorar a escalabilidade verticalmente adicionando mais recursos\/hardware aos nodes existentes, isso nem sempre \u00e9 poss\u00edvel, muitas vezes devido ao custo ou \u00e0s limita\u00e7\u00f5es de adicionar novo hardware.<\/p>\n<p>Portanto, a escalabilidade horizontal \u00e9 necess\u00e1ria, o que significa adicionar mais nodes aos node s de rede existentes em vez de melhorar a funcionalidade dos nodes existentes. \u00c9 aqui que a replica\u00e7\u00e3o do PostgreSQL entra em cena.<\/p>\n\n<p>Neste artigo, n\u00f3s discutimos os tipos de replica\u00e7\u00f5es PostgreSQL, benef\u00edcios, modos de replica\u00e7\u00e3o, instala\u00e7\u00e3o e failover do PostgreSQL entre SMR e MMR. Agora vamos ouvir de voc\u00ea.<\/p>\n<p>Qual voc\u00ea costuma implementar? Qual recurso de banco de dados \u00e9 o mais importante para voc\u00ea e por qu\u00ea? N\u00f3s adorar\u00edamos ler seus pensamentos! Compartilhe-os na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como qualquer propriet\u00e1rio de site lhe dir\u00e1, a perda de dados e o tempo de inatividade, mesmo em doses m\u00ednimas, podem ser catastr\u00f3ficos. Eles podem atingir &#8230;<\/p>\n","protected":false},"author":117,"featured_media":52453,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[219,593,439,715],"topic":[1030],"class_list":["post-52076","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-databases","tag-development","tag-postgresql","topic-problemas-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Conhe\u00e7a os principais aspectos da do PostgreSQL, incluindo seus benef\u00edcios, elementos, tipos e estrat\u00e9gias para backups de dados sem interrup\u00e7\u00e3o.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado\" \/>\n<meta property=\"og:description\" content=\"Conhe\u00e7a os principais aspectos da do PostgreSQL, incluindo seus benef\u00edcios, elementos, tipos e estrat\u00e9gias para backups de dados sem interrup\u00e7\u00e3o.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-11T12:36:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T07:49:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Conhe\u00e7a os principais aspectos da do PostgreSQL, incluindo seus benef\u00edcios, elementos, tipos e estrat\u00e9gias para backups de dados sem interrup\u00e7\u00e3o.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado\",\"datePublished\":\"2022-08-11T12:36:45+00:00\",\"dateModified\":\"2023-08-22T07:49:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/\"},\"wordCount\":5356,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png\",\"keywords\":[\"database\",\"databases\",\"development\",\"PostgreSQL\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/\",\"name\":\"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png\",\"datePublished\":\"2022-08-11T12:36:45+00:00\",\"dateModified\":\"2023-08-22T07:49:09+00:00\",\"description\":\"Conhe\u00e7a os principais aspectos da do PostgreSQL, incluindo seus benef\u00edcios, elementos, tipos e estrat\u00e9gias para backups de dados sem interrup\u00e7\u00e3o.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png\",\"width\":1460,\"height\":730,\"caption\":\"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Problemas WordPress\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/problemas-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado - Kinsta\u00ae","description":"Conhe\u00e7a os principais aspectos da do PostgreSQL, incluindo seus benef\u00edcios, elementos, tipos e estrat\u00e9gias para backups de dados sem interrup\u00e7\u00e3o.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/","og_locale":"pt_PT","og_type":"article","og_title":"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado","og_description":"Conhe\u00e7a os principais aspectos da do PostgreSQL, incluindo seus benef\u00edcios, elementos, tipos e estrat\u00e9gias para backups de dados sem interrup\u00e7\u00e3o.","og_url":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2022-08-11T12:36:45+00:00","article_modified_time":"2023-08-22T07:49:09+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Conhe\u00e7a os principais aspectos da do PostgreSQL, incluindo seus benef\u00edcios, elementos, tipos e estrat\u00e9gias para backups de dados sem interrup\u00e7\u00e3o.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png","twitter_creator":"@salmanravoof","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Salman Ravoof","Tempo estimado de leitura":"23 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado","datePublished":"2022-08-11T12:36:45+00:00","dateModified":"2023-08-22T07:49:09+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/"},"wordCount":5356,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png","keywords":["database","databases","development","PostgreSQL"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/","url":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/","name":"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png","datePublished":"2022-08-11T12:36:45+00:00","dateModified":"2023-08-22T07:49:09+00:00","description":"Conhe\u00e7a os principais aspectos da do PostgreSQL, incluindo seus benef\u00edcios, elementos, tipos e estrat\u00e9gias para backups de dados sem interrup\u00e7\u00e3o.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/08\/replicacao-postgresql.png","width":1460,"height":730,"caption":"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/replicacao-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Problemas WordPress","item":"https:\/\/kinsta.com\/pt\/topicos\/problemas-wordpress\/"},{"@type":"ListItem","position":3,"name":"Replica\u00e7\u00e3o PostgreSQL: Um Guia Detalhado"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/52076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=52076"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/52076\/revisions"}],"predecessor-version":[{"id":56349,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/52076\/revisions\/56349"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/nl"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/jp"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/translations\/dk"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/52076\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/52453"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=52076"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=52076"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=52076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}