ALTER FOREIGN TABLE

ALTER FOREIGN TABLE — modifica a definição de uma tabela estrangeira

Sinopse

ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] nome [ * ]
    ação [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] nome [ * ]
    RENAME [ COLUMN ] nome_da_coluna TO novo_nome_da_coluna
ALTER FOREIGN TABLE [ IF EXISTS ] nome
    RENAME TO novo_nome
ALTER FOREIGN TABLE [ IF EXISTS ] nome
    SET SCHEMA novo_esquema

onde ação é uma entre:

    ADD [ COLUMN ] nome_da_coluna tipo_de_dados​
        [ COLLATE ordenação ] [ restrição_de_coluna [ ... ] ]
    DROP [ COLUMN ] [ IF EXISTS ] nome_da_coluna [ RESTRICT | CASCADE ]
    ALTER [ COLUMN ] nome_da_coluna [ SET DATA ] TYPE tipo_de_dados​
          [ COLLATE ordenação ]
    ALTER [ COLUMN ] nome_da_coluna SET DEFAULT expressão
    ALTER [ COLUMN ] nome_da_coluna DROP DEFAULT
    ALTER [ COLUMN ] nome_da_coluna { SET | DROP } NOT NULL
    ALTER [ COLUMN ] nome_da_coluna SET STATISTICS inteiro
    ALTER [ COLUMN ] nome_da_coluna SET ( opção_de_atributo = valor [, ... ] )
    ALTER [ COLUMN ] nome_da_coluna RESET ( opção_de_atributo [, ... ] )
    ALTER [ COLUMN ] nome_da_coluna SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
    ALTER [ COLUMN ] nome_da_coluna OPTIONS ( [ ADD | SET | DROP ] opção ['valor'] [, ... ])
    ADD restrição_de_tabela [ NOT VALID ]
    VALIDATE CONSTRAINT nome_da_restrição
    DROP CONSTRAINT [ IF EXISTS ]  nome_da_restrição [ RESTRICT | CASCADE ]
    DISABLE TRIGGER [ nome_do_gatilho | ALL | USER ]
    ENABLE TRIGGER [ nome_do_gatilho | ALL | USER ]
    ENABLE REPLICA TRIGGER nome_do_gatilho
    ENABLE ALWAYS TRIGGER nome_do_gatilho
    SET WITHOUT OIDS
    INHERIT tabela_mãe
    NO INHERIT tabela_mãe
    OWNER TO {
        novo_dono
      | CURRENT_ROLE
      | CURRENT_USER
      | SESSION_USER
    }
    OPTIONS ( [ ADD | SET | DROP ] opção ['valor'] [, ... ])

Descrição

O comando ALTER FOREIGN TABLE altera a definição de uma tabela estrangeira existente. Existem várias subformas:

ADD COLUMN

Esta forma adiciona uma nova coluna à tabela estrangeira, usando a mesma sintaxe de CREATE FOREIGN TABLE. Ao contrário do caso de adicionar uma coluna a uma tabela regular, nada acontece com o armazenamento subjacente: esta ação simplesmente declara que alguma nova coluna agora está acessível por meio da tabela estrangeira.

DROP COLUMN [ IF EXISTS ]

Esta forma remove uma coluna da tabela estrangeira. É necessário especificar CASCADE se algo fora da tabela depender da coluna; por exemplo, visões. Se for especificado IF EXISTS e a coluna não existir, não será relatado nenhum erro. É emitido um aviso neste caso.

SET DATA TYPE

Esta forma altera o tipo de dados de uma coluna da tabela estrangeira. Novamente, isto não afeta nenhum armazenamento subjacente: esta ação simplesmente muda o tipo de dados que o PostgreSQL acredita que a coluna tenha.

SET/DROP DEFAULT

Estas formas definem ou removem o valor padrão de uma coluna. Os valores padrão se aplicam apenas aos comandos INSERT e UPDATE posteriores; não causam alterações nas linhas já existentes na tabela.

SET/DROP NOT NULL

Marca a coluna como permitindo ou não valores nulos.

SET STATISTICS

Esta forma define o destino da coleta de estatísticas por coluna para as operações ANALYZE posteriores. Veja a forma semelhante do comando ALTER TABLE para obter mais detalhes.

SET ( opção_de_atributo = valor [, ... ] )
RESET ( opção_de_atributo [, ... ] )

Esta forma define ou redefine as opções por atributo. Veja a forma semelhante do comando ALTER TABLE para obter mais detalhes.

SET STORAGE

Esta forma define o modo de armazenamento para a coluna. Veja a forma semelhante do comando ALTER TABLE para obter mais detalhes. Note que o modo de armazenamento não tem efeito, a menos que o empacotador de dados estrangeiros da tabela escolha prestar atenção a ele.

ADD restrição_de_tabela [ NOT VALID ]

Esta forma adiciona uma nova restrição a uma tabela estrangeira, usando a mesma sintaxe do comando CREATE FOREIGN TABLE. No momento, apenas as restrições CHECK e NOT NULL têm suporte.

Ao contrário do caso de adicionar uma restrição a uma tabela regular, nada é feito para verificar se a restrição está correta; em vez disso, esta ação simplesmente declara que alguma nova condição deve ser considerada válida para todas as linhas da tabela estrangeira. (Veja a discussão no comando CREATE FOREIGN TABLE.) Se a restrição estiver marcada como NOT VALID (permitido apenas para as restrições CHECK), então não é considerado assumir, mas é registrado para uso futuro.

VALIDATE CONSTRAINT

Esta forma marca como válida uma restrição que foi previamente marcada como NOT VALID. Nenhuma ação é executada para verificar a restrição, mas as consultas futuras assumirão que ela é válida.

DROP CONSTRAINT [ IF EXISTS ]

Esta forma remove a restrição especificada em uma tabela estrangeira. Se for especificado IF EXISTS e a restrição não existir, não será relatado nenhum erro. É emitido um aviso neste caso.

DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER

Estas formas configuram o disparo do(s) gatilho(s) pertencente(s) à tabela estrangeira. Veja a forma semelhante do comando ALTER TABLE para obter mais detalhes.

SET WITHOUT OIDS

Sintaxe para manter a compatibilidade com as versões anteriores para remover a coluna do sistema oid. Como as colunas do sistema oid não podem mais ser adicionadas, isto nunca terá efeito.

INHERIT tabela_mãe

Esta forma adiciona a tabela estrangeira de destino como uma nova filha da tabela mãe especificada. Veja a forma semelhante do comando ALTER TABLE para obter mais detalhes.

NO INHERIT tabela_mãe

Esta forma remove a tabela estrangeira de destino da lista de filhas da tabela mãe especificada.

OWNER

Esta forma altera o dono da tabela estrangeira para o usuário especificado.

OPTIONS ( [ ADD | SET | DROP ] opção ['valor'] [, ... ] )

Altera as opções da tabela estrangeira, ou de uma de suas colunas. ADD, SET, e DROP especificam a ação a ser executada. É assumido ADD se nenhuma operação for especificada explicitamente. Não são permitidos nomes de opção duplicados (embora seja aceitável que uma opção de tabela e uma opção de coluna tenham o mesmo nome). Os nomes e valores de opções também são validados usando a biblioteca do empacotador de dados estrangeiros.

RENAME

As formas RENAME alteram o nome da tabela estrangeira, ou o nome de uma coluna individual em uma tabela estrangeira.

SET SCHEMA

Esta forma move a tabela estrangeira para outro esquema.

Todas as ações, exceto RENAME e SET SCHEMA, podem ser combinadas em uma lista de múltiplas alterações a serem aplicadas em paralelo. Por exemplo, é possível adicionar várias colunas e/ou alterar o tipo de dados de várias colunas em um único comando.

Se o comando for escrito como ALTER FOREIGN TABLE IF EXISTS ..., e a tabela estrangeira não existir, não será relatado nenhum erro. É emitido um aviso neste caso.

É necessário ser o dono da tabela para usar o comando ALTER FOREIGN TABLE. Para alterar o esquema de uma tabela estrangeira, é necessário ter o privilégio CREATE no novo esquema. 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 esquema da tabela. (Estas restrições impõem que alterar o dono não faz nada que não poderia ser feito excluindo e recriando a tabela. Entretanto, um superusuário pode alterar o dono de qualquer tabela.) Para adicionar uma coluna ou alterar o tipo de dados de uma coluna, também é necessário possuir o privilégio USAGE no tipo de dados.

Parâmetros

nome

O nome (possivelmente qualificado pelo esquema) da tabela estrangeira existente a ser alterada. Se for especificado ONLY antes do nome da tabela, somente esta tabela será alterada. Se não for especificado ONLY, a tabela e todas as suas tabelas descendentes (se houver) serão alteradas. Opcionalmente, pode ser especificado * após o nome da tabela, para indicar explicitamente que as tabelas descendentes estão incluídas.

nome_da_coluna

O nome da coluna nova ou existente.

novo_nome_da_coluna

O novo nome para a coluna existente.

novo_nome

O novo nome para a tabela.

tipo_de_dados

O tipo de dados da nova coluna, ou novo tipo de dados para uma coluna existente.

restrição_de_tabela

A nova restrição de tabela para a tabela estrangeira.

nome_da_restrição

O nome da restrição existente a ser removida.

CASCADE

Remove automaticamente os objetos que dependem da coluna ou restrição removida (por exemplo, visões que fazem referência à coluna) e, por sua vez, todos os objetos que dependem desses objetos (veja Acompanhamento de dependência).

RESTRICT

Recusa remover a coluna ou restrição se houver algum objeto dependente. Este é o comportamento padrão.

nome_do_gatilho

Nome de um único gatilho para desativar ou ativar.

ALL

Desativa ou ativa todos os gatilhos pertencentes à tabela estrangeira. (Requer o privilégio de superusuário se algum dos gatilhos for gerado internamente. O sistema principal não adiciona estes gatilhos a tabelas estrangeiras, mas o código complementar pode fazê-lo.)

USER

Desativa ou ativa todos os gatilhos pertencentes à tabela estrangeira, exceto os gatilhos gerados internamente.

tabela_mãe

A tabela mãe a ser associada ou desassociada da tabela estrangeira.

novo_dono

O nome de usuário do novo dono da tabela.

novo_esquema

O nome do esquema para o qual a tabela será movida.

Notas

A palavra-chave COLUMN é ruído, podendo ser omitida.

A consistência com o servidor estrangeiro não é verificada quando uma coluna é adicionada, ou removida, pelos comandos ADD COLUMN ou DROP COLUMN, uma restrição NOT NULL ou CHECK é adicionada, ou um tipo de dados de coluna é alterado usando SET DATA TYPE. É responsabilidade do usuário garantir que a definição da tabela corresponda ao lado remoto.

Veja CREATE FOREIGN TABLE para obter uma descrição adicional dos parâmetros válidos.

Exemplos

Para marcar uma coluna como não-nula:

ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;

Para alterar as opções de uma tabela estrangeira:

ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3);

Conformidade

As formas ADD, DROP, e SET DATA TYPE, estão em conformidade com o padrão SQL. As outras formas são extensões do PostgreSQL ao padrão SQL. Além disso, a capacidade de especificar mais de uma manipulação em um único comando ALTER FOREIGN TABLE também é uma extensão.

O comando ALTER FOREIGN TABLE DROP COLUMN pode ser usado para remover a única coluna de uma tabela estrangeira, deixando a tabela como zero-colunas. Esta é uma extensão ao padrão SQL, que não permite tabelas estrangeiras com zero-colunas.

Veja também

CREATE FOREIGN TABLE, DROP FOREIGN TABLE