ALTER PUBLICATION — modifica a definição de uma publicação
ALTER PUBLICATIONnome ADDobjeto_de_publicação[, ...] ALTER PUBLICATIONnome SETobjeto_de_publicação[, ...] ALTER PUBLICATIONnome DROPobjeto_de_publicação[, ...] ALTER PUBLICATIONnome SET (parâmetro_de_publicação[=valor] [, ... ] ) ALTER PUBLICATIONnome OWNER TO {novo_dono| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER PUBLICATIONnome RENAME TOnovo_nomeondeobjeto_de_publicaçãoé um entre: TABLE [ ONLY ]nome_da_tabela[ * ] [ (nome_da_coluna[, ... ] ) ] [ WHERE (expressão) ] [, ... ] TABLES IN SCHEMA {nome_do_esquema| CURRENT_SCHEMA } [, ... ]
O comando ALTER PUBLICATION altera os atributos
de uma publicação.
As três primeiras variantes alteram quais tabelas/esquemas fazem
parte da publicação.
A cláusula SET irá substituir a lista de
tabelas/esquemas na publicação pela lista especificada;
as tabelas/esquemas existentes que estavam presentes na publicação
serão removidos.
As cláusulas ADD e DROP
irão adicionar e remover uma ou mais tabelas/esquemas da publicação.
Note que adicionar tabelas/esquemas a uma publicação que já possui
subscritores irá exigir uma ação
ALTER SUBSCRIPTION ... REFRESH PUBLICATION
do lado do subscritor para que se torne efetiva.
Note também que DROP TABLES IN SCHEMA não irá
excluir nenhuma tabela do esquema que tenha sido especificada usando
FOR TABLE/ADD TABLE,
e uma combinação de DROP com a cláusula
WHERE não é permitida.
A quarta variante deste comando listada na sinopse altera todas as propriedades da publicação especificadas em CREATE PUBLICATION. As propriedades não mencionadas no comando mantêm suas configurações anteriores.
As variantes restantes alteram o dono e o nome da publicação.
É necessário ser o dono da publicação para usar o comando
ALTER PUBLICATION.
Adicionar uma tabela a uma publicação também requer ser o dono desta
tabela.
Executar ADD TABLES IN SCHEMA e
SET TABLES IN SCHEMA em uma publicação
requer que o usuário que executa o comando seja um superusuário.
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,
e esta função de banco de dados precisa possuir o privilégio
CREATE no banco de dados.
Além disso, o novo dono de uma publicação
FOR ALL TABLES ou
FOR TABLES IN SCHEMA
deve ser um superusuário.
Entretanto, um superusuário pode alterar o dono de uma publicação,
independentemente destas restrições.
Adicionar/definir qualquer esquema quando a publicação também publica uma tabela com uma lista de colunas, e vice-versa, não tem suporte.
nomeO nome da publicação existente cuja definição será alterada.
nome_da_tabela
O nome da tabela existente.
Se for especificado ONLY antes do nome da
tabela, somente esta tabela será afetada.
Se não for especificado ONLY, a tabela e todas
as suas tabelas descendentes (se houver) serão afetadas.
Opcionalmente, pode ser especificado * após o
nome da tabela para indicar explicitamente que as tabelas
descendentes estão incluídas.
Opcionalmente, pode ser especificada uma lista de colunas. Veja CREATE PUBLICATION para obter detalhes. Note não haver suporte para uma subscrição com várias publicações nas quais a mesma tabela foi publicada com listas de colunas diferentes. Veja Warning: Combining Column Lists from Multiple Publications para obter detalhes sobre possíveis problemas ao alterar listas de colunas.
Se for especificada a cláusula opcional WHERE,
as linhas nas quais a
expressão
resultar em falso ou nulo, não será realizada sua a publicação.
Note que é necessário o uso de parênteses em torno da expressão.
A expressão é avaliada
com base na função utilizada para a conexão de replicação.
nome_do_esquemaNome de um esquema existente.
SET ( parâmetro_de_publicação [= valor] [, ... ] )Esta cláusula altera os parâmetros de publicação originalmente definidos por CREATE PUBLICATION, que deve ser consultada para obter mais informações.
Alterar o parâmetro publish_via_partition_root
pode levar à perda ou duplicação de dados no subscritor, porque
altera a identidade e o esquema das tabelas publicadas.
Note que isto ocorre somente quando uma tabela raiz de partição
é especificada como destino da replicação.
Este problema pode ser evitado abstendo-se de modificar as
tabelas folha da partição após
ALTER PUBLICATION ... SET até que
ALTER SUBSCRIPTION ... REFRESH PUBLICATION
seja executado e apenas atualizando usando a opção
copy_data = off.
novo_donoO nome de usuário do novo dono da publicação.
novo_nomeO novo nome da publicação.
Alterar a publicação para publicar apenas exclusões e atualizações:
ALTER PUBLICATION noinsert
SET (publish = 'update, delete');
Adicionar algumas tabelas à publicação:
ALTER PUBLICATION mypublication
ADD TABLE users (user_id, firstname), departments;
Alterar o conjunto de colunas publicadas para uma tabela:
ALTER PUBLICATION mypublication
SET TABLE users (user_id, firstname, lastname), TABLE departments;
Adicionar os esquemas marketing e
sales à publicação
sales_publication:
ALTER PUBLICATION sales_publication
ADD TABLES IN SCHEMA marketing, sales;
Adicionar as tabelas users,
departments e o esquema
production à publicação.
production_publication:
ALTER PUBLICATION production_publication
ADD TABLE users, departments, TABLES IN SCHEMA production;
O comando ALTER PUBLICATION é uma extensão do
PostgreSQL.