ALTER SUBSCRIPTION

ALTER SUBSCRIPTION — modifica a definição de uma subscrição

Sinopse

ALTER SUBSCRIPTION nome​
    CONNECTION 'informação_da_conexão'
ALTER SUBSCRIPTION nome​
    SET PUBLICATION nome_da_publicação [, ...]​
        [ WITH ( opção_de_publicação [= valor] [, ... ] ) ]
ALTER SUBSCRIPTION nome​
    ADD PUBLICATION nome_da_publicação [, ...]​
        [ WITH ( opção_de_publicação [= valor] [, ... ] ) ]
ALTER SUBSCRIPTION nome​
    DROP PUBLICATION nome_da_publicação [, ...]​
        [ WITH ( opção_de_publicação [= valor] [, ... ] ) ]
ALTER SUBSCRIPTION nome​
    REFRESH PUBLICATION​
        [ WITH ( opção_de_atualização [= valor] [, ... ] ) ]
ALTER SUBSCRIPTION nome​
    ENABLE
ALTER SUBSCRIPTION nome​
    DISABLE
ALTER SUBSCRIPTION nome​
    SET ( parâmetro_de_subscrição [= valor] [, ... ] )
ALTER SUBSCRIPTION nome​
    SKIP ( opção_de_salto = valor )
ALTER SUBSCRIPTION nome​
    OWNER TO {
        novo_dono
      | CURRENT_ROLE
      | CURRENT_USER
      | SESSION_USER
    }
ALTER SUBSCRIPTION nome​
    RENAME TO novo_nome

Descrição

O comando ALTER SUBSCRIPTION pode alterar a maioria das propriedades da subscrição que podem ser especificadas no comando CREATE SUBSCRIPTION.

É necessário ser o dono da subscrição para usar o comando ALTER SUBSCRIPTION. Para mudar o nome da subscrição ou alterar seu dono, é necessário ter a permissão CREATE no banco de dados. Além disso, para alterar o dono é necessário ser capaz de executar o comando SET ROLE para a função de banco de dados (role) que será a nova dona, Se a subscrição tiver password_required=false, somente os superusuários podem modificá-la.

Ao atualizar uma publicação, são removidas as relações que não fazem mais parte da publicação e, também, removidos os encaixes de sincronização de tabelas, se houver. É necessário remover estes encaixes para que os recursos alocados para a subscrição no hospedeiro remoto sejam liberados. Se devido à falha na rede ou algum outro erro o PostgreSQL não conseguir remover os encaixes, será relatado um erro. Para prosseguir nesta situação, é necessário repetir a operação, ou desassociar o encaixe da subscrição e cancelar a subscrição, conforme explicado em DROP SUBSCRIPTION.

Os comandos ALTER SUBSCRIPTION ... REFRESH PUBLICATION, ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... com a opção refresh como true, ALTER SUBSCRIPTION ... SET (failover = true|false) e ALTER SUBSCRIPTION ... SET (two_phase = false) não podem ser executados em um bloco de transação.

Os comandos ALTER SUBSCRIPTION ... REFRESH PUBLICATION e ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... com a opção refresh como true também não podem ser executados quando a subscrição tiver a efetivação two_phase ativada, a menos que copy_data seja false. Veja a coluna subtwophasestate de pg_subscription para conhecer o estado de duas fases corrente.

Parâmetros

nome #

O nome da subscrição cujas propriedades vão ser alteradas.

CONNECTION 'informação_da_conexão' #

Esta cláusula substitui a cadeia de caracteres de conexão definida originalmente pelo comando CREATE SUBSCRIPTION, que deverá ser consultado para obter mais informações.

SET PUBLICATION nome_da_publicação
ADD PUBLICATION nome_da_publicação
DROP PUBLICATION nome_da_publicação #

Estas cláusulas alteram a lista de publicações subscritas. SET substitui toda a lista de publicações por uma nova lista, ADD adiciona publicações à lista de publicações, e DROP remove publicações da lista de publicações. É permitido que sejam especificadas publicações inexistentes nas variantes ADD e SET para que os usuários possam adicioná-las posteriormente. Veja CREATE SUBSCRIPTION para obter mais informações. Por padrão, este comando também irá funcionar como REFRESH PUBLICATION.

A opção_de_publicação especifica opções adicionais para esta operação. As opções com suporte são:

refresh (boolean)

Quando falso, o comando não tenta atualizar as informações da tabela. Deverá então ser executado REFRESH PUBLICATION separadamente. O valor padrão é true.

Além disso, podem ser especificadas as opções descritas em REFRESH PUBLICATION para controlar a operação de atualização implícita.

REFRESH PUBLICATION #

Busca informações de tabela ausentes no publicador. Isto irá iniciar a replicação das tabelas que foram adicionadas às publicações subscritas desde CREATE SUBSCRIPTION, ou da última chamada de REFRESH PUBLICATION.

A opção_de_atualização especifica opções adicionais para a operação de atualização. As opções com suporte são:

copy_data (boolean)

Especifica se os dados preexistentes nas publicações às quais a replicação está subscrita devem ser copiados no início da replicação. O valor padrão é true.

As tabelas previamente subscritas não são copiadas, mesmo que a cláusula de filtro de linha da tabela WHERE tenha sido modificada posteriormente.

Veja Notas para obter detalhes sobre como copy_data = true pode interagir com o parâmetro origin.

Veja o parâmetro binary de CREATE SUBSCRIPTION para obter detalhes sobre como copiar dados preexistentes em formato binário.

ENABLE #

Ativa uma subscrição desativada anteriormente, iniciando o processo trabalhador de replicação lógica no final da transação.

DISABLE #

Desativa uma subscrição em execução, parando o processo trabalhador de replicação lógica no final da transação.

SET ( parâmetro_de_subscrição [= valor] [, ... ] ) #

Esta cláusula altera parâmetros originalmente definidos pelo comando CREATE SUBSCRIPTION. Veja este comando para obter mais informações. Os parâmetros que podem ser alterados são slot_name, synchronous_commit, binary, streaming, disable_on_error, password_required, run_as_owner, origin, failover, e two_phase. Somente um superusuário pode definir password_required = false.

Ao alterar o slot_name, os valores das propriedades failover e two_phase do encaixe indicado podem ser diferentes dos parâmetros correspondentes failover e two_phase especificados na subscrição. Ao criar o encaixe, certifique-se de que as propriedades do encaixe failover e two_phase correspondam aos seus parâmetros correspondentes na subscrição. Caso contrário, o encaixe no publicador pode se comportar de maneira diferente do que estas opções de subscrição indicam: por exemplo, o encaixe no publicador pode ser sincronizado com os servidores de espera mesmo quando a opção de failover da subscrição estiver desativada, ou pode ser desativado para sincronização mesmo quando a opção de failover da assinatura estiver ativada.

Os parâmetros failover e two_phase só podem ser alterados quando a subscrição estiver desativada.

Ao alterar o parâmetro two_phase de true para false, o processo em segundo plano irá relatar um erro se alguma transação preparada tiver sido realizada pelo processo trabalhador de replicação lógica (desde quando o parâmetro two_phase ainda estava true) for encontrada. Você pode resolver as transações preparadas no nó publicador, ou desfazê-las manualmente no subscritor e tentar novamente. As transações preparadas pelo processo trabalhador de replicação lógica correspondentes a uma subscrição específica têm o seguinte padrão: pg_gid_%u_%u (parameters: subscription oid, remote transaction id xid). Para resolver estas transações manualmente, você precisa desfazer todas as transações preparadas com os IDs de subscrição correspondentes em seu nome. As aplicações podem verificar pg_prepared_xacts para encontrar as transações preparadas necessárias. Após a opção two_phase ser alterada de true para false, o publicador irá replicar as transações novamente quando elas forem efetivadas.

SKIP ( opção_de_salto = valor ) #

Ignora a aplicação de todas as alterações da transação remota. Se os dados recebidos violarem alguma restrição, a replicação lógica será interrompida até que o problema seja resolvido. Ao usar o comando ALTER SUBSCRIPTION ... SKIP, o processo de replicação lógica ignora todas as alterações de modificação de dados dentro da transação. Esta opção não afeta as transações que já foram preparadas com two_phase no subscritor. Após o trabalhador de replicação lógica ignorar com sucesso a transação ou concluir uma transação, o LSN (armazenado em pg_subscription.subskiplsn) é limpo. Veja Conflitos para obter detalhes sobre conflitos de replicação lógica.

A opção_de_salto especifica a opção para esta operação. A opção com suporte é:

lsn (pg_lsn)

Especifica o LSN final da transação remota cujas alterações devem ser ignoradas pelo processo de replicação lógica. O LSN final é o LSN no qual a transação é efetivada ou preparada. Não há suporte para ignorar subtransações individuais. Definir NONE redefine o LSN.

novo_dono #

O nome de usuário do novo dono da subscrição.

novo_nome #

O novo nome para a subscrição.

Ao especificar um parâmetro do tipo de dados boolean, a parte do = valor pode ser omitida, o que é equivalente a especificar TRUE.

Exemplos

Alterar a publicação subscrita por uma subscrição para insert_only:

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

Desativar (parar) a subscrição:

ALTER SUBSCRIPTION mysub DISABLE;

Conformidade

O comando ALTER SUBSCRIPTION é uma extensão do PostgreSQL.

Veja também

CREATE SUBSCRIPTION, DROP SUBSCRIPTION, CREATE PUBLICATION, ALTER PUBLICATION