ALTER PUBLICATION

ALTER PUBLICATION — modifica a definição de uma publicação

Sinopse

ALTER PUBLICATION nome​
    ADD objeto_de_publicação [, ...]
ALTER PUBLICATION nome​
    SET objeto_de_publicação [, ...]
ALTER PUBLICATION nome​
    DROP objeto_de_publicação [, ...]
ALTER PUBLICATION nome​
    SET ( parâmetro_de_publicação [= valor] [, ... ] )
ALTER PUBLICATION nome​
    OWNER TO {
        novo_dono
      | CURRENT_ROLE
      | CURRENT_USER
      | SESSION_USER
    }
ALTER PUBLICATION nome​
    RENAME TO novo_nome

onde objeto_de_publicação é um entre:

    TABLE [ ONLY ] nome_da_tabela [ * ] [ ( nome_da_coluna [, ... ] ) ]​
          [ WHERE ( expressão ) ] [, ... ]
    TABLES IN SCHEMA { nome_do_esquema | CURRENT_SCHEMA } [, ... ]

Descrição

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.

Parâmetros

nome

O 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_esquema

Nome 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.

Cuidado

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_dono

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

novo_nome

O novo nome da publicação.

Exemplos

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;

Conformidade

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

Veja também

CREATE PUBLICATION, DROP PUBLICATION, CREATE SUBSCRIPTION, ALTER SUBSCRIPTION