19.6. Replicação #

19.6.1. Servidores de envio
19.6.2. Servidor primário
19.6.3. Servidores em-espera
19.6.4. Subscritores

Estas configurações controlam o comportamento da funcionalidade integrada de replicação por fluxo (veja Replicação por fluxo), e da funcionalidade integrada de replicação lógica (veja Replicação lógica).

Para a replicação por fluxo, os servidores serão primários ou em-espera. Os servidores primários podem enviar dados, enquanto os servidores em-espera são sempre receptores de dados replicados. Quando é usada a replicação em cascata (veja Replicação em cascata), os servidores em-espera podem atuar tanto como transmissores quanto como receptores. Os parâmetros destinam-se principalmente aos servidores de envio e em-espera, embora alguns parâmetros façam sentido apenas no servidor primário. As configurações podem variar entre as instâncias sem problemas, caso isto seja necessário.

Para a replicação lógica, os servidores publicadores (servidores que realizam CREATE PUBLICATION) replicam dados para os subscritores (servidores que realizam CREATE SUBSCRIPTION. Os servidores podem ser publicadores e subscritores ao mesmo tempo. Note-se que as seções a seguir referem-se aos publicadores como remetentes. Para obter mais detalhes sobre as configurações de replicação lógica, veja Definições de configuração.

19.6.1. Servidores de envio #

Estes parâmetros podem ser configurados em qualquer servidor que envie dados de replicação para um ou mais servidores em-espera. Como o servidor primário é sempre um servidor de envio, portanto estes parâmetros devem ser sempre definidos no servidor primário. A função e o significado desses parâmetros não mudam após o servidor em-espera se tornar o primário.

max_wal_senders (integer) #

Especifica o número máximo de conexões simultâneas de servidores em-espera, ou clientes de cópia de segurança base, por fluxo (ou seja, o número máximo de processos que enviam dados do WAL (walsender) em execução simultânea). O padrão é 10. O valor 0 significa que a replicação por fluxo está desativada. A desconexão abrupta de um cliente de fluxo pode deixar um encaixe (slot) de conexão órfão para trás, até que o tempo limite seja atingido, portanto, este parâmetro deve ser definido um pouco acima do número máximo de clientes esperados para que os clientes desconectados possam se reconectar imediatamente. Este parâmetro só pode ser definido na ativação do servidor. Além disso, wal_level deve ser definido como replica ou superior para permitir conexões de servidores em-espera.

Ao executar um servidor em-espera, deve-se definir este parâmetro com o mesmo valor, ou um valor superior ao do servidor primário. Caso contrário, não serão permitidas consultas no servidor em-espera.

max_replication_slots (integer) #

Especifica o número máximo de encaixes de replicação (veja Encaixes de replicação) que o servidor pode dar suporte. O padrão é 10. Este parâmetro só pode ser definido na ativação do servidor. Definir como um valor inferior ao número de encaixes de replicação existentes impedirá que o servidor seja carregado. Além disso, wal_level deve ser definido como replica, ou superior, para permitir o uso de encaixes de replicação.

wal_keep_size (integer) #

Especifica o tamanho mínimo de arquivos de WAL antigos mantidos no diretório pg_wal, caso um servidor em-espera precise buscá-los para replicação por fluxo. Se um servidor em-espera conectado ao servidor de envio ficar atrasado em mais de wal_keep_size megabytes, o servidor de envio poderá remover um segmento do WAL ainda necessário para o servidor em-espera, caso em que a conexão de replicação será fechada. As conexões em cascata também vão falhar como resultado. (Entretanto, o servidor em-espera poderá se recuperar buscando o segmento no arquivamento, se estiver sendo usado arquivamento de WAL.)

Este parâmetro define apenas o tamanho mínimo dos segmentos retidos no diretório pg_wal; o sistema pode precisar reter mais segmentos para arquivamento do WAL, ou recuperar de um ponto de verificação. Se wal_keep_size for zero (o padrão), o sistema não manterá nenhum segmento extra para fins de espera, portanto, o número de segmentos antigos de WAL disponíveis para os servidores em-espera é função da localização do ponto de verificação anterior e do status do arquivamento do WAL. Se o valor for especificado sem unidade, será considerado sendo megabytes. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

max_slot_wal_keep_size (integer) #

Especifica o tamanho máximo dos arquivos de WAL que Encaixes de replicação pode reter no diretório pg_wal no momento do ponto de verificação. Se max_slot_wal_keep_size for -1 (o padrão), os encaixes de replicação podem reter uma quantidade ilimitada de arquivos de WAL. Caso contrário, se o restart_lsn de um encaixe de replicação ficar atrás do LSN corrente em mais do que o tamanho especificado, o servidor em-espera usando o encaixe poderá não ser mais capaz de continuar a replicação devido à remoção dos arquivos de WAL necessários. Pode-se ver os encaixes de replicação existentes na instância na visão pg_replication_slots. Se o valor for especificado sem unidade, será considerado sendo megabytes. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

idle_replication_slot_timeout (integer) #

Invalida os encaixes de replicação que tenham permanecido inativos (não usados por uma conexão de replicação) por um tempo superior a esta duração. Se este valor for especificado sem unidade, será considerado sendo segundos. Um valor zero (o padrão) desativa o mecanismo de invalidação por tempo limite de inatividade. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

A invalidação de encaixe devido ao tempo limite de inatividade ocorre durante o ponto de verificação. Como os pontos de verificação ocorrem em intervalos de checkpoint_timeout, poderá haver algum atraso entre o momento em que o idle_replication_slot_timeout foi excedido e o momento em que a invalidação do encaixe será disparada no próximo ponto de verificação. Para evitar estes atrasos, os usuários podem forçar um ponto de verificação para invalidar prontamente os encaixes inativos. A duração da inatividade do encaixe é calculada usando o valor de pg_replication_slots.inactive_since do encaixe.

Note-se que o mecanismo de invalidação por tempo limite de inatividade não se aplica a encaixes que não reservam WAL, ou a encaixes em servidores em-espera que estão sendo sincronizados a partir do servidor primário. (ou seja, encaixes de servidores em-espera tendo pg_replication_slots.synced com o valor true). Os encaixes sincronizados são sempre considerados inativos, porque não realizam decodificação lógica para produzir alterações.

wal_sender_timeout (integer) #

Fecha as conexões de replicação que estiverem inativas por mais tempo do que este período. Serve para o servidor de envio detectar uma falha no servidor em-espera ou interrupção da rede. Se o valor for especificado sem unidade, será considerado sendo milissegundos. O padrão é 60 segundos. O valor zero desativa o mecanismo de tempo esgotado (timeout).

Em um agrupamento distribuído por diversos locais geográficos, o uso de valores diferentes por local traz mais flexibilidade no gerenciamento do agrupamento. Um valor menor é útil para detecção mais rápida de falha em um servidor em-espera com uma conexão de rede de baixa latência, e um valor maior ajuda a avaliar melhor a integridade de um servidor em-espera localizado em um local remoto com uma conexão de rede de alta latência.

track_commit_timestamp (boolean) #

Registra a hora de efetivação das transações. Este parâmetro só pode ser definido na ativação do servidor. O padrão é off.

19.6.2. Servidor primário #

Estes parâmetros podem ser definidos no servidor primário que enviará dados de replicação para um ou mais servidores em-espera. Note-se que, além desses parâmetros, wal_level deve ser definido de forma apropriada no servidor primário e, opcionalmente, o arquivamento de WAL também pode ser ativado (veja Arquivamento). Os valores desses parâmetros em servidores em-espera são irrelevantes, embora se possa desejar defini-los nesses servidores em preparação para a possibilidade de um servidor em-espera se tornar o primário.

synchronous_standby_names (string) #

Especifica uma lista de servidores em-espera que podem dar suporte a replicação síncrona, conforme descrito em Replicação síncrona. Haverá um ou mais servidores em-espera síncronos ativos; as transações aguardando a efetivação poderão prosseguir após estes servidores em-espera confirmarem o recebimento de seus dados. Os servidores em-espera síncronos serão aqueles cujos nomes aparecem nesta lista, e conectados no momento e recebendo dados em tempo real (conforme mostrado pelo estado streaming na coluna state na visão pg_stat_replication). Especificar mais de um servidor em-espera síncrono pode permitir alta disponibilidade e proteção contra perda de dados.

O nome do servidor em-espera para este propósito é a configuração de application_name no servidor em-espera, conforme definido nas informações de conexão do servidor em-espera. No caso de um servidor em-espera de replicação física, deverá ser definido na configuração primary_conninfo; o padrão é a configuração de cluster_name, se definido, senão walreceiver. Para a replicação lógica, pode ser definido nas informações de conexão da subscrição, e o padrão é o nome da subscrição. Para outros consumidores de fluxo de replicação, veja sua documentação.

Este parâmetro especifica uma lista de servidores em-espera usando uma das seguintes sintaxes:

[FIRST] num_sync ( standby_name [, ...] )
ANY num_sync ( standby_name [, ...] )
standby_name [, ...]

onde num_sync é o número de servidores em-espera síncronos dos quais as transações precisam aguardar respostas, e standby_name é o nome do servidor em-espera. num_sync deve ser um valor inteiro maior que zero. FIRST e ANY especificam o método para escolher esperas síncronas dos servidores listados.

A palavra-chave FIRST juntamente com num_sync, especifica uma replicação síncrona baseada em prioridade, e faz com que as efetivações de transação aguardem até que seus registros de WAL sejam replicados para num_sync servidores em-espera síncronos escolhidos com base em suas prioridades. Por exemplo, uma configuração FIRST 3 (s1, s2, s3, s4) fará com que cada efetivação espere por respostas de três servidores em-espera de maior prioridade escolhidos entre os servidores em-espera s1, s2, s3 e s4. Os servidores em-espera cujos nomes aparecem primeiro na lista recebem maior prioridade e serão considerados síncronos. Os outros servidores em-espera que apareçam depois nesta lista representam possíveis servidores em-espera síncronos. Se algum dos servidores em-espera síncrono corrente for desconectado por qualquer motivo, será substituído imediatamente pelo próximo servidores em-espera de prioridade mais alta. A palavra-chave FIRST é opcional.

A palavra-chave ANY juntamente com num_sync, especifica uma replicação síncrona baseada em quorum, fazendo com que as efetivações de transação aguardem até que seus registros de WAL sejam replicados para pelo menos num_sync servidores em-espera listados. Por exemplo, uma configuração ANY 3 (s1, s2, s3, s4) fará com que cada efetivação prossiga assim que pelo menos três servidores em-espera, entre s1, s2, s3 e s4, respondam.

FIRST e ANY não diferenciam letras maiúsculas de minúsculas. Se estas palavras-chave forem usadas como o nome de um servidor em-espera, seu standby_name deverá ser colocado entre aspas.

A terceira sintaxe era usada antes do PostgreSQL versão 9.6, e ainda recebe suporte. É o mesmo que a primeira sintaxe com FIRST e num_sync igual a 1. Por exemplo, FIRST 1 (s1, s2) e s1, s2 têm o mesmo significado: s1 ou s2 é escolhido como servidor em-espera síncrono.

A entrada especial * corresponde a qualquer nome de servidor em-espera.

Não há nenhum mecanismo para impor a unicidade dos nomes de servidores em-espera. No caso de duplicidade, um dos servidores em-espera correspondentes será considerado o de maior prioridade, embora exatamente qual seja indeterminado.

Nota

Cada standby_name deve ter a forma de um identificador SQL válido, a menos que seja *. Pode-se usar aspas, se necessário. Mas observe que os standby_names são comparados a nomes de aplicações em-espera sem distinção entre letras maiúsculas e minúsculas, com aspas ou não.

Se não for especificado nenhum nome de servidor em-espera síncrono aqui, a replicação síncrona não será ativada, e as efetivações de transação não aguardarão a replicação. Esta é a configuração padrão. Mesmo quando a replicação síncrona está ativa, as transações podem ser configuradas separadamente para não esperar pela replicação, definindo o parâmetro synchronous_commit como local ou off.

Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

synchronized_standby_slots (string) #

Lista (separada por vírgulas) de nomes de encaixes de servidores em-espera de replicação por fluxo (streaming), pelos quais os processos lógicos de envio de WAL irão aguardar. Os processos lógicos de envio de WAL enviarão alterações decodificadas aos plugins somente após os encaixes de replicação especificados confirmarem o recebimento do WAL. Isto garante que os encaixes de falha (failover) de replicação lógica não consumam alterações até que elas sejam recebidas e escritas nos servidores em-espera físicos correspondentes. Se uma conexão de replicação lógica precisar mudar para uma réplica em-espera física após a promoção dessa réplica, o encaixe de replicação física para a réplica em-espera deverá ser listado aqui. Note-se que a replicação lógica não prosseguirá se os encaixes especificados em synchronized_standby_slots não existirem ou forem invalidados. Além disso, as funções de gerenciamento de replicação pg_replication_slot_advance, pg_logical_slot_get_changes e pg_logical_slot_peek_changes, quando usadas com encaixes de falha lógicos, irão aguardar até que todos os encaixes físicos especificados em synchronized_standby_slots tenham confirmado o recebimento do WAL.

Os servidores em-espera correspondentes aos encaixes de replicação física em synchronized_standby_slots devem configurar sync_replication_slots = true para poderem receber alterações de encaixe de falha lógico do servidor primário.

19.6.3. Servidores em-espera #

Estas configurações controlam o comportamento do servidor em-espera que deve receber dados de replicação. Seus valores no servidor primário são irrelevantes.

primary_conninfo (string) #

Especifica a cadeia de caracteres de conexão a ser usada para que o servidor em-espera se conecte ao servidor de envio. Esta cadeia de caracteres está no formato descrito em Cadeias de caracteres de conexão. Se alguma opção não for especificada nesta cadeia de caracteres, será verificada a variável de ambiente correspondente (veja Variáveis ​​de ambiente). Se a variável de ambiente também não estiver definida, serão usados os valores padrão.

A cadeia de caracteres de conexão deve especificar o nome de hospedeiro (ou endereço) do servidor de envio, bem como o número da porta, se não for igual ao padrão do servidor em-espera. Também deve ser especificado um nome de usuário correspondente a uma função de banco de dados (identificador de autorização/role) com privilégios adequados no servidor de envio (veja Autenticação). Também será necessário fornecer a senha, se o servidor de envio exigir autenticação por senha. Pode ser fornecida na cadeia de caracteres primary_conninfo, ou em um arquivo ~/.pgpass em separado no servidor em-espera (deve ser usado replication como nome do hospedeiro no arquivo ~/.pgpass) (veja O arquivo de senhas).

Para a sincronização de encaixes de replicação (veja Replication Slot Synchronization), também é necessário especificar um dbname válido na cadeia de caracteres de primary_conninfo. Isto será usado apenas para a sincronização de encaixes, sendo ignorado para fluxo (streaming).

Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor. Se este parâmetro for alterado enquanto o processo de recepção de WAL estiver em execução, este processo será sinalizado para terminar, esperando-se que reinicie com a nova configuração. (exceto se primary_conninfo for uma cadeia de caracteres vazia). Esta configuração não terá efeito se o servidor não estiver no modo em-espera.

primary_slot_name (string) #

Opcionalmente especifica um encaixe de replicação existente a ser usado ao conectar com o servidor de envio por meio de replicação por fluxo, para controlar a remoção de recursos no nó anterior (veja Encaixes de replicação). Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor. Se este parâmetro for alterado enquanto o processo de recepção de WAL estiver em execução, este processo será sinalizado para terminar, esperando-se que reinicie com a nova configuração. Esta configuração não terá efeito se primary_conninfo não estiver definido, ou se o servidor não estiver no modo em-espera.

hot_standby (boolean) #

Especifica se é possível ou não se conectar e executar consultas durante a restauração, conforme descrito em Servidor em-espera ativo. O padrão é on. Este parâmetro só pode ser definido na ativação do servidor. Só tem efeito durante a restauração de arquivamento, ou no modo em-espera.

max_standby_archive_delay (integer) #

Quando Hot Standby [126] está ativo, este parâmetro determina quanto tempo o servidor em-espera deve esperar antes de cancelar as instruções em-espera que estejam em conflito com entradas do WAL prestes a serem aplicadas, conforme descrito em Tratamento de conflitos de consulta. O parâmetro max_standby_archive_delay se aplica quando os dados de WAL estão sendo lidos do arquivamento de WAL (e, portanto, não é o corrente). Se o valor for especificado sem unidade, será considerado sendo milissegundos. O padrão é 30 segundos. O valor -1 permite que o servidor em-espera aguarde indefinidamente a conclusão das instruções conflitantes. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

Note-se que max_standby_archive_delay não é o mesmo que o tempo máximo que uma instrução pode ser executada antes do cancelamento; em vez disso, é o tempo total máximo permitido para aplicar os dados de qualquer segmento de WAL. Portanto, se uma instrução resultou em um atraso significativo no início do segmento de WAL, as instruções conflitantes subsequentes terão muito menos tempo de espera disponível.

max_standby_streaming_delay (integer) #

Quando Hot Standby está ativo, este parâmetro determina quanto tempo o servidor em-espera deve esperar antes de cancelar as instruções em-espera que estejam em conflito com entradas de WAL prestes a serem aplicadas, conforme descrito em Tratamento de conflitos de consulta. O parâmetro max_standby_streaming_delay se aplica quando os dados de WAL estão sendo recebidos via replicação por fluxo. Se o valor for especificado sem unidade, será considerado sendo milissegundos. O padrão é 30 segundos. O valor -1 permite que o servidor em-espera aguarde indefinidamente a conclusão das instruções conflitantes. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

Note-se que max_standby_streaming_delay não é o mesmo que o tempo máximo que uma instrução pode ser executada antes do cancelamento; em vez disso, é o tempo total máximo permitido para aplicar os dados de WAL uma vez recebidos do servidor primário. Portanto, se uma instrução resultou em um atraso significativo, as instruções conflitantes subsequentes terão muito menos tempo de espera disponível até que o servidor em-espera seja atualizado novamente.

wal_receiver_create_temp_slot (boolean) #

Especifica se o processo de recepção de WAL deve criar um encaixe de replicação temporário na instância remota, quando não for configurado nenhum encaixe de replicação permanente para ser usado (usando primary_slot_name). O padrão é off. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor. Se este parâmetro for alterado enquanto o processo de recepção de WAL estiver em execução, este processo será sinalizado para terminar, esperando-se que reinicie com a nova configuração.

wal_receiver_status_interval (integer) #

Especifica a frequência mínima para o processo de recepção de WAL no servidor em-espera enviar informações sobre o progresso da replicação para o servidor primário ou anterior, o que pode ser visto usando a visão pg_stat_replication. O servidor em-espera irá relatar o último local de WAL que escreveu, a última posição que descarregou para o disco, e a última posição que aplicou. O valor desse parâmetro é o tempo máximo entre relatórios. As atualizações são enviadas sempre que as posições de escrita ou descarga mudam, ou no intervalo especificado por este parâmetro, se definido como um valor diferente de zero. Há casos adicionais em que as atualizações são enviadas ignorando este parâmetro; por exemplo, quando o processamento do WAL existente é concluído, ou quando synchronous_commit é definido como remote_apply. Portanto, a posição da aplicação pode ficar um pouco atrás da posição verdadeira. Se o valor for especificado sem unidade, será considerado sendo segundos. O padrão é 10 segundos. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

hot_standby_feedback (boolean) #

Especifica se um servidor em hot standby enviará ou não retorno para o servidor primário ou anterior sobre as instruções em execução no momento no servidor em-espera. Este parâmetro pode ser usado para eliminar cancelamentos de instrução causados por registros de limpeza, mas pode provocar sobrecarga no servidor primário para algumas cargas de trabalho. As mensagens de retorno não serão enviadas com mais frequência do que uma vez por wal_receiver_status_interval. O padrão é off. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

Se estiver em uso a replicação em cascata, o retorno será passado para o servidor anterior até atingir o primário. Os servidores em-espera não fazem outro uso do retorno que recebem, a não ser passar para o anterior.

Note-se que, se o relógio do servidor em-espera estiver adiantado ou atrasado, a mensagem de confirmação poderá não ser enviada no intervalo exigido. Em casos extremos, isto poderá levar a um risco prolongado de não remoção de linhas inativas no servidor primário por períodos extensos, uma vez que o mecanismo de confirmação baseia-se em carimbos de data e hora.

wal_receiver_timeout (integer) #

Fecha as conexões de replicação inativas por mais tempo do que este período. Serve para o servidor em-espera de recebimento detectar uma falha no nó primário, ou interrupção da rede. Se o valor for especificado sem unidade, será considerado sendo milissegundos. O padrão é 60 segundos. O valor zero desativa o mecanismo de tempo esgotado (timeout). Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

wal_retrieve_retry_interval (integer) #

Especifica quanto tempo o servidor em-espera deve esperar quando os dados de WAL não estiverem disponíveis por nenhuma fonte (replicação por fluxo, pg_wal local, ou arquivamento de WAL) antes de tentar recuperar os dados de WAL novamente. Se o valor for especificado sem unidade, será considerado sendo milissegundos. O padrão é 5 segundos. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

Este parâmetro é útil em configurações onde um nó em restauração precisa controlar o tempo de espera para que novos dados de WAL estejam disponíveis. Por exemplo, na restauração de arquivamento é possível tornar a restauração mais responsiva na detecção de um novo arquivo de WAL, reduzindo o valor desse parâmetro. Em um sistema com baixa atividade de WAL, aumentar reduz a quantidade de requisições necessárias para acessar os arquivos de WAL, algo útil, por exemplo, em ambientes de nuvem, onde se leva em consideração a quantidade de vezes que uma infraestrutura é acessada.

Na replicação lógica, este parâmetro também limita a frequência com que um processo trabalhador de aplicação de replicação ou um processo trabalhador de sincronização de tabela com falha será reiniciado.

recovery_min_apply_delay (integer) #

Por padrão, um servidor em-espera restaura os registros de WAL do servidor de envio o mais rápido possível. Pode ser útil ter uma cópia dos dados com atraso, oferecendo oportunidades para corrigir erros de perda de dados. Este parâmetro permite atrasar a restauração por um tempo especificado. Por exemplo, se este parâmetro for definido como 5min, o servidor em-espera irá reproduzir cada efetivação de transação apenas quando a hora do sistema no servidor em-espera for de pelo menos cinco minutos após o momento de efetivação relatado pelo servidor primário. Se o valor for especificado sem unidade, será considerado sendo milissegundos. O padrão é zero, ou seja, sem adição de atraso.

É possível que o atraso de replicação entre os servidores exceda o valor desse parâmetro, caso em que nenhum atraso será adicionado. Note-se que o atraso é calculado entre o carimbo de tempo do WAL, conforme escrito no servidor primário, e a hora corrente no servidor em-espera. Atrasos na transferência, devido ao atraso da rede ou configurações de replicação em cascata, podem reduzir muito o tempo de espera disponível. Se os relógios do sistema no servidor primário e no servidor em-espera não estiverem sincronizados, isto pode fazer com que a restauração aplique os registros antes do esperado; mas isto não é um problema importante, porque as configurações úteis desse parâmetro são muito maiores do que os desvios de tempo típicos entre servidores.

O atraso ocorre apenas em registros de WAL de efetivação de transação. Os demais registros são reexecutados o mais rapidamente possível, o que não é um problema, porque as regras de visibilidade do MVCC garantem que seus efeitos não sejam visíveis até que o registro de efetivação correspondente seja aplicado.

O atraso ocorre assim que o banco de dados em restauração atinge um estado consistente, até que o servidor em-espera seja promovido ou acionado. Após isto, o servidor em-espera encerrará a restauração sem mais esperar.

Os registros de WAL devem ser mantidos no servidor em-espera até que estejam prontos para serem aplicados. Portanto, atrasos mais longos resultarão em um maior acúmulo de arquivos de WAL, aumentando os requisitos de espaço em disco para o diretório pg_wal do servidor em-espera.

Este parâmetro destina-se ao uso em implantações de replicação por fluxo; entretanto, se o parâmetro for especificado, ele será respeitado em todos os casos, exceto na recuperação de falhas. hot_standby_feedback sofrerá atrasos com o uso desta funcionalidade, o que pode levar ao inchaço (bloat) no servidor primário; o uso dos dois em conjunto deve ser feito com cautela.

Atenção

A replicação síncrona é afetada por esta configuração quando synchronous_commit for definido como remote_apply; todo COMMIT precisará aguardar para ser aplicado.

Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

sync_replication_slots (boolean) #

Permite que um servidor em-espera físico sincronize encaixes de falha lógicos a partir do servidor primário, de modo que os subscritores lógicos possam retomar a replicação a partir do novo servidor primário após a falha.

Está inativo por padrão. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

19.6.4. Subscritores #

Estas configurações controlam o comportamento de um subscritor de replicação lógica. Seus valores no publicador são irrelevantes. Veja Definições de configuração para obter mais informações.

max_active_replication_origins (integer) #

Especifica quantas origens de replicação (veja Acompanhamento do progresso da replicação) podem ser monitoradas ao mesmo tempo, limitando efetivamente quantas subscrições de replicação lógica podem ser criadas no servidor. Definir este valor para um número inferior ao número corrente de origens de replicação monitoradas (mostrado em pg_replication_origin_status) impedirá a ativação do servidor. O padrão é 10. Este parâmetro só pode ser definido na ativação do servidor. max_active_replication_origins deve ser definido, no mínimo, como o número de subscrições a serem adicionadas ao subscritor, mais uma margem de reserva para a sincronização de tabela.

max_logical_replication_workers (integer) #

Especifica o número máximo de processos trabalhadores de replicação lógica. Isto inclui processos trabalhadores de aplicação líderes, processos trabalhadores de aplicação paralelos e processos trabalhadores de sincronização de tabelas.

Os processos trabalhadores de replicação lógica são obtidos do conjunto definido por max_worker_processes.

O padrão é 4. Este parâmetro só pode ser definido na ativação do servidor.

max_sync_workers_per_subscription (integer) #

Número máximo de processos trabalhadores de sincronização por subscrição. Este parâmetro controla a quantidade de paralelismo da cópia inicial dos dados durante a inicialização da subscrição, ou quando são incluídas novas tabelas.

No momento, só pode haver um processo trabalhador de sincronização por tabela.

Os processos trabalhadores de sincronização são retirados do pool definido por max_logical_replication_workers.

O padrão é 2. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

max_parallel_apply_workers_per_subscription (integer) #

Número máximo de processos trabalhadores paralelos de aplicação por subscrição. Este parâmetro controla o nível de paralelismo para o fluxo de transações em andamento com o parâmetro de subscrição. streaming = parallel.

Os processos trabalhadores de aplicação em paralelo são obtidos do conjunto definido por max_logical_replication_workers.

O padrão é 2. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.