ALTER TYPE — modifica a definição de um tipo de dados
ALTER TYPEnome OWNER TO {novo_dono| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER TYPEnome RENAME TOnovo_nomeALTER TYPEnome SET SCHEMAnovo_esquemaALTER TYPEnome RENAME ATTRIBUTEnome_do_atributoTOnovo_nome_do_atributo [ CASCADE | RESTRICT ] ALTER TYPEnomeação[, ... ] ALTER TYPEnome ADD VALUE [ IF NOT EXISTS ]novo_valor_enum [ { BEFORE | AFTER }valor_enum_vizinho] ALTER TYPEnome RENAME VALUEvalor_enum_existenteTOnovo_valor_enumALTER TYPEnome SET (propriedade=valor[, ... ] ) ondeaçãoé uma entre: ADD ATTRIBUTEnome_do_atributotipo_de_dados [ COLLATEordenação] [ CASCADE | RESTRICT ] DROP ATTRIBUTE [ IF EXISTS ]nome_do_atributo [ CASCADE | RESTRICT ] ALTER ATTRIBUTEnome_do_atributo [ SET DATA ] TYPEtipo_de_dados [ COLLATEordenação] [ CASCADE | RESTRICT ]
O comando ALTER TYPE altera a definição de um
tipo de dados existente.
Existem várias subformas:
OWNEREsta forma altera o dono do tipo de dados.
RENAMEEsta forma altera o nome do tipo de dados.
SET SCHEMAEsta forma move o tipo de dados para outro esquema.
RENAME ATTRIBUTEEsta forma só pode ser usada com tipos de dados compostos. Altera o nome de um atributo individual do tipo de dados.
ADD ATTRIBUTEEsta forma adiciona um novo atributo a um tipo de dados composto, usando a mesma sintaxe de CREATE TYPE.
DROP ATTRIBUTE [ IF EXISTS ]
Esta forma remove um atributo de um tipo de dados composto.
Se for especificado IF EXISTS e o atributo não
existir, não será relatado nenhum erro.
É emitido um aviso neste caso.
ALTER ATTRIBUTE ... SET DATA TYPEEsta forma altera o tipo de dados de um atributo do tipo de dados composto.
ADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]
Esta forma adiciona um novo valor a um tipo de dados enum.
O lugar do novo valor na ordem da enumeração pode ser especificado
como sendo BEFORE ou AFTER
(antes ou após) um dos valores existentes.
Caso contrário, o novo item será adicionado no final da lista de
valores.
Se for especificado IF NOT EXISTS, não será
relatado um erro se o tipo de dados já contiver o novo valor: será
emitido um aviso neste caso, mas nenhuma outra ação será tomada.
Caso contrário, será relatado um erro se o novo valor já estiver
presente.
RENAME VALUEEsta forma altera o nome de um valor do tipo de dados enumerado. A posição do valor na ordem da enumeração não é afetada. Será relatado um erro se o valor especificado não estiver presente, ou se o novo nome já estiver presente.
SET ( propriedade = valor [, ... ] )
Esta forma só é aplicável aos tipos de dados base.
Permite o ajuste de um subconjunto das propriedades do
tipo de dados base que podem ser definidas no comando
CREATE TYPE.
Especificamente, as seguintes propriedades podem ser alteradas:
Para RECEIVE pode ser atribuído o nome da
função de entrada binária, ou NONE para
remover a função de entrada binária do tipo de dados.
O uso dessa opção requer privilégio de superusuário.
Para SEND pode ser atribuído o nome da
função de saída binária, ou NONE para
remover a função de saída binária do tipo de dados.
O uso dessa opção requer privilégio de superusuário.
Para TYPMOD_IN pode ser atribuído o nome da
função de entrada do modificador de tipo de dados, ou
NONE para remover a função de entrada do
modificador de tipo de dados do tipo de dados.
O uso dessa opção requer privilégio de superusuário.
Para TYPMOD_OUT pode ser atribuído o nome da
função de saída do modificador de tipo de dados, ou
NONE para remover a função de saída do
modificador de tipo de dados do tipo de dados.
O uso dessa opção requer privilégio de superusuário.
Para ANALYZE pode ser atribuído o nome da
função de coleta de estatísticas específica do tipo de dados,
ou NONE para remover a função de coleta
de estatísticas do tipo de dados.
O uso dessa opção requer privilégio de superusuário.
Para SUBSCRIPT pode ser atribuído o nome da
função tratadora de índice específica do tipo de dados,
ou NONE para remover a função tratadora de
índice do tipo de dados.
O uso dessa opção requer privilégio de superusuário.
Para STORAGE
pode ser atribuído plain,
extended, external,
ou main
(veja TOAST para obter mais
informações sobre o que significam).
Entretanto, mudar de plain para outra
configuração requer o privilégio de superusuário (porque requer
que todas as funções C do tipo de dados
estejam prontas para TOAST), e mudar para
plain de outra configuração não é permitido
(porque o tipo de dados já pode ter valores
TOAST presentes no banco de dados).
Note que por si só alterar esta opção não altera nenhum dado
armazenado, apenas define a estratégia TOAST
padrão a ser usada para colunas da tabela criadas posteriormente.
Veja ALTER TABLE para alterar a estratégia
de TOAST para colunas de tabela existentes.
Veja CREATE TYPE para obter mais detalhes sobre estas propriedades de tipo de dados. Note que, quando apropriado, uma alteração nessas propriedades para um tipo de dados base será propagada automaticamente para os domínios com base neste tipo de dados.
As ações ADD ATTRIBUTE,
DROP ATTRIBUTE, e
ALTER ATTRIBUTE,
podem ser combinadas em uma lista de múltiplas alterações a serem
aplicadas em paralelo.
Por exemplo, é possível adicionar vários atributos e/ou alterar o
tipo de dados de vários atributos em um único comando.
É necessário ser o dono do tipo de dados para executar o comando
ALTER TYPE.
Para alterar o esquema do tipo de dados, também é 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 do tipo de dados.
(Estas restrições impõem que alterar o dono não faz nada que
não poderia ser feito excluindo e recriando o tipo de dados.
Entretanto, um superusuário pode alterar o dono de qualquer
tipo de dados.)
Para adicionar um atributo, ou alterar o tipo de dados de um atributo,
também é necessário ter o privilégio USAGE
no tipo de dados do atributo.
nomeO nome (possivelmente qualificado pelo esquema) do tipo de dados existente a ser alterado.
novo_nomeO novo nome para o tipo de dados.
novo_donoO nome de usuário do novo dono do tipo de dados.
novo_esquemaO novo esquema para o tipo de dados.
nome_do_atributoO nome do atributo a ser adicionado, alterado ou removido.
novo_nome_do_atributoO novo nome do atributo a ser renomeado.
tipo_de_dadosO tipo de dados do atributo a ser adicionado, ou o novo tipo de dados do atributo a ser alterado.
novo_valor_enumO novo valor a ser adicionado à lista de valores do tipo de dados enum, ou o novo nome a ser dado a um valor existente. Como todos os literais de enumeração, precisa estar entre apóstrofos.
valor_enum_vizinhoO valor de enumeração existente ao qual o novo valor deve ser adicionado imediatamente antes ou depois na ordem de classificação do tipo de dados enum. Como todos os literais de enumeração, precisa estar entre apóstrofos.
valor_enum_existenteO valor de enumeração existente a ser renomeado. Como todos os literais de enumeração, precisa estar entre apóstrofos.
propriedadeO nome da propriedade do tipo de dados base a ser modificada; veja acima os valores possíveis.
CASCADEPropaga, automaticamente, a operação no tipo de dados que está sendo alterado para as tabelas tipadas e suas descendentes.
RESTRICTRecusa a operação se o tipo de dados que está sendo alterado for o tipo de dados de uma tabela tipada. Este é o comportamento padrão.
Se ALTER TYPE ... ADD VALUE (a forma que adiciona
um novo valor a um tipo de dados enum) for executado em um bloco de
transação, o novo valor não poderá ser usado até que a transação
tenha sido efetivada.
Às vezes, as comparações envolvendo um valor de enumeração adicionado
serão mais lentas do que as comparações envolvendo apenas os membros
originais do tipo de dados enum.
Isto geralmente ocorrerá apenas se for usado
BEFORE ou AFTER para definir
a posição de classificação do novo valor em algum lugar diferente
do final da lista.
No entanto, às vezes isto acontece mesmo que o novo valor seja
adicionado no final (isto ocorre quando o contador OID
“volta ao início” após a criação original do
tipo de dados enum).
A desaceleração é geralmente insignificante; mas se for importante,
o desempenho ideal poderá ser recuperado removendo e recriando o
tipo de dados enum, ou fazendo uma cópia de segurança
e recuperando o banco de dados.
Para mudar o nome de um tipo de dados:
ALTER TYPE correio_eletrônico RENAME TO email;
Para alterar o dono do tipo de dados email para
joe:
ALTER TYPE email OWNER TO joe;
Para alterar o esquema do tipo de dados email
para clientes:
ALTER TYPE email SET SCHEMA clientes;
Para adicionar um novo atributo a um tipo de dados composto:
ALTER TYPE compfoo ADD ATTRIBUTE f3 int;
Para adicionar um novo valor a um tipo de dados enum em uma posição de classificação específica:
ALTER TYPE cores ADD VALUE 'laranja' AFTER 'vermelho';
Para mudar o nome de um valor de enumeração:
ALTER TYPE cores RENAME VALUE 'púrpura' TO 'lilás';
Para criar funções de E/S binárias para um tipo de dados base existente:
CREATE FUNCTION mytypesend(mytype) RETURNS bytea ...;
CREATE FUNCTION mytyperecv(internal, oid, integer) RETURNS mytype ...;
ALTER TYPE mytype SET (
SEND = mytypesend,
RECEIVE = mytyperecv
);
As variantes para adicionar e remover atributos fazem parte do padrão SQL; as demais variantes são extensões do PostgreSQL.