ALTER FOREIGN TABLE — modifica a definição de uma tabela estrangeira
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]nome[ * ]ação[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]nome[ * ] RENAME [ COLUMN ]nome_da_colunaTOnovo_nome_da_colunaALTER FOREIGN TABLE [ IF EXISTS ]nomeRENAME TOnovo_nomeALTER FOREIGN TABLE [ IF EXISTS ]nomeSET SCHEMAnovo_esquemaondeaçãoé uma entre: ADD [ COLUMN ]nome_da_colunatipo_de_dados [ COLLATEordenação] [restrição_de_coluna[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]nome_da_coluna[ RESTRICT | CASCADE ] ALTER [ COLUMN ]nome_da_coluna[ SET DATA ] TYPEtipo_de_dados [ COLLATEordenação] ALTER [ COLUMN ]nome_da_colunaSET DEFAULTexpressãoALTER [ COLUMN ]nome_da_colunaDROP DEFAULT ALTER [ COLUMN ]nome_da_coluna{ SET | DROP } NOT NULL ALTER [ COLUMN ]nome_da_colunaSET STATISTICSinteiroALTER [ COLUMN ]nome_da_colunaSET (opção_de_atributo=valor[, ... ] ) ALTER [ COLUMN ]nome_da_colunaRESET (opção_de_atributo[, ... ] ) ALTER [ COLUMN ]nome_da_colunaSET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ]nome_da_colunaOPTIONS ( [ ADD | SET | DROP ]opção['valor'] [, ... ]) ADDrestrição_de_tabela[ NOT VALID ] VALIDATE CONSTRAINTnome_da_restriçãoDROP 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 TRIGGERnome_do_gatilhoENABLE ALWAYS TRIGGERnome_do_gatilhoSET WITHOUT OIDS INHERITtabela_mãeNO INHERITtabela_mãeOWNER TO {novo_dono| CURRENT_ROLE | CURRENT_USER | SESSION_USER } OPTIONS ( [ ADD | SET | DROP ]opção['valor'] [, ... ])
O comando ALTER FOREIGN TABLE altera a definição
de uma tabela estrangeira existente.
Existem várias subformas:
ADD COLUMNEsta 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 TYPEEsta 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 NULLMarca a coluna como permitindo ou não valores nulos.
SET STATISTICSEsta 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 ] TRIGGEREstas 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ãeEsta 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ãeEsta forma remove a tabela estrangeira de destino da lista de filhas da tabela mãe especificada.
OWNEREsta 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 SCHEMAEsta 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.
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_colunaO nome da coluna nova ou existente.
novo_nome_da_colunaO novo nome para a coluna existente.
novo_nomeO novo nome para a tabela.
tipo_de_dadosO tipo de dados da nova coluna, ou novo tipo de dados para uma coluna existente.
restrição_de_tabelaA nova restrição de tabela para a tabela estrangeira.
nome_da_restriçãoO nome da restrição existente a ser removida.
CASCADERemove 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).
RESTRICTRecusa remover a coluna ou restrição se houver algum objeto dependente. Este é o comportamento padrão.
nome_do_gatilhoNome de um único gatilho para desativar ou ativar.
ALLDesativa 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.)
USERDesativa ou ativa todos os gatilhos pertencentes à tabela estrangeira, exceto os gatilhos gerados internamente.
tabela_mãeA tabela mãe a ser associada ou desassociada da tabela estrangeira.
novo_donoO nome de usuário do novo dono da tabela.
novo_esquemaO nome do esquema para o qual a tabela será movida.
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.
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);
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.