ALTER SUBSCRIPTION — modifica a definição de uma subscrição
ALTER SUBSCRIPTIONnome CONNECTION 'informação_da_conexão' ALTER SUBSCRIPTIONnome SET PUBLICATIONnome_da_publicação[, ...] [ WITH (opção_de_publicação[=valor] [, ... ] ) ] ALTER SUBSCRIPTIONnome ADD PUBLICATIONnome_da_publicação[, ...] [ WITH (opção_de_publicação[=valor] [, ... ] ) ] ALTER SUBSCRIPTIONnome DROP PUBLICATIONnome_da_publicação[, ...] [ WITH (opção_de_publicação[=valor] [, ... ] ) ] ALTER SUBSCRIPTIONnome REFRESH PUBLICATION [ WITH (opção_de_atualização[=valor] [, ... ] ) ] ALTER SUBSCRIPTIONnome ENABLE ALTER SUBSCRIPTIONnome DISABLE ALTER SUBSCRIPTIONnome SET (parâmetro_de_subscrição[=valor] [, ... ] ) ALTER SUBSCRIPTIONnome SKIP (opção_de_salto=valor) ALTER SUBSCRIPTIONnome OWNER TO {novo_dono| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SUBSCRIPTIONnome RENAME TOnovo_nome
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.
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çãoADD PUBLICATION nome_da_publicaçãoDROP 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.
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;
O comando ALTER SUBSCRIPTION é uma extensão do
PostgreSQL.