ALTER DOMAIN — modifica a definição de um domínio
ALTER DOMAINnome_do_domínio{ SET DEFAULTexpressão| DROP DEFAULT } ALTER DOMAINnome_do_domínio{ SET | DROP } NOT NULL ALTER DOMAINnome_do_domínioADDrestrição_de_domínio[ NOT VALID ] ALTER DOMAINnome_do_domínioDROP CONSTRAINT [ IF EXISTS ]nome_da_restrição[ RESTRICT | CASCADE ] ALTER DOMAINnome_do_domínioRENAME CONSTRAINTnome_da_restriçãoTOnovo_nome_da_restriçãoALTER DOMAINnome_do_domínioVALIDATE CONSTRAINTnome_da_restriçãoALTER DOMAINnome_do_domínioOWNER TO {novo_dono| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER DOMAINnome_do_domínioRENAME TOnovo_nomeALTER DOMAINnome_do_domínioSET SCHEMAnovo_esquemaonderestrição_de_domínioé: [ CONSTRAINTnome_da_restrição] { NOT NULL | CHECK (expressão) }
O comando ALTER DOMAIN altera a definição
de um domínio existente.
Existem várias subformas:
SET/DROP DEFAULT
Estas formas definem ou removem o valor padrão de um domínio.
Note que o valor padrão só será aplicado nos comandos
INSERT subsequentes; as linhas que já estão
em uma tabela usando o domínio não são afetadas.
SET/DROP NOT NULL
Estas formas alteram se o domínio está marcado para permitir
valores NULL, ou para rejeitar valores
NULL.
Só é possível usar SET NOT NULL quando as
colunas que usam o domínio, não contêm valores nulos.
ADD restrição_de_domínio [ NOT VALID ]
Esta forma adiciona uma nova restrição a um domínio.
Quando é adicionada uma nova restrição a um domínio, todas as
colunas que usam este domínio são verificadas em relação à
restrição recém-adicionada.
Estas verificações podem ser suprimidas adicionando a nova
restrição usando a opção NOT VALID; a restrição
poderá ser validada posteriormente usando o comando
ALTER DOMAIN ... VALIDATE CONSTRAINT.
As linhas recém-inseridas, ou atualizadas, são sempre verificadas
em relação a todas as restrições, mesmo aquelas marcadas como
NOT VALID.
A cláusula NOT VALID só é aceita para as
restrições CHECK.
DROP CONSTRAINT [ IF EXISTS ]
Esta forma remove restrições em um domínio.
Se for especificado IF EXISTS, e a restrição
não existir, não será relatado nenhum erro.
É emitido um aviso neste caso.
RENAME CONSTRAINTEsta forma altera o nome da restrição no domínio.
VALIDATE CONSTRAINT
Esta forma valida uma restrição previamente adicionada como
NOT VALID, ou seja, verifica se todos os
valores nas colunas das tabelas do tipo de dados do domínio
atendem à restrição especificada.
OWNEREsta forma altera o dono do domínio para o usuário especificado.
RENAMEEsta forma altera o nome do domínio.
SET SCHEMAEsta forma altera o esquema do domínio. Quaisquer restrições associadas ao domínio também são movidas para o novo esquema.
É necessário ser o dono do domínio para usar o comando
ALTER DOMAIN.
Para alterar o esquema de um domínio, 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 domínio.
(Estas restrições impõem que alterar o dono não faz nada que
não poderia ser feito excluindo e recriando o domínio.
Entretanto, um superusuário pode alterar o dono de qualquer
domínio.)
nome_do_domínioO nome (possivelmente qualificado pelo esquema) do domínio existente a ser alterado.
restrição_de_domínioA nova restrição de domínio para o domínio.
nome_da_restriçãoO nome da restrição existente para remover ou alterar o nome.
NOT VALIDNão verifica os dados armazenados existentes quanto à validade da restrição.
CASCADERemove automaticamente os objetos que dependem da restrição e, por sua vez, todos os objetos que dependem desses objetos (veja Acompanhamento de dependência).
RESTRICTRecusa remover a restrição se houver algum objeto dependente. Este é o comportamento padrão.
novo_nomeO novo nome para o domínio.
novo_nome_da_restriçãoO novo nome para a restrição.
novo_donoO nome de usuário do novo dono do domínio.
novo_esquemaO novo esquema para o domínio.
Embora o comando ALTER DOMAIN ADD CONSTRAINT
tente verificar se os dados armazenados existentes satisfazem
a nova restrição, esta verificação não exaustiva,
porque o comando não pode “enxergar” as linhas da tabela
que foram inseridas ou atualizadas recentemente e ainda não efetivadas.
Se houver o risco de que operações simultâneas possam inserir dados
inválidos, a maneira de proceder é adicionar a restrição usando a
opção NOT VALID, efetivar o comando, aguardar
até que todas as transações iniciadas antes dessa efetivação sejam
concluídas e, em seguida, executar o comando
ALTER DOMAIN VALIDATE CONSTRAINT para procurar
dados que violem a restrição.
Este método é confiável, porque uma vez que a restrição é efetivada,
todas as novas transações têm a garantia de aplicá-la aos novos
valores do tipo de dados do domínio.
No momento, os comandos ALTER DOMAIN ADD CONSTRAINT,
ALTER DOMAIN VALIDATE CONSTRAINT, e
ALTER DOMAIN SET NOT NULL irão falhar se o domínio
especificado, ou qualquer domínio derivado, for usado em uma coluna
do tipo
contenedor
(uma coluna composta, de matriz, ou intervalo)
em qualquer tabela do banco de dados.
Estes comandos devem ser melhorados no futuro, para poderem verificar
a nova restrição para estes valores aninhados.
Para adicionar uma restrição de NOT NULL a um domínio:
ALTER DOMAIN zipcode SET NOT NULL;
Para remover uma restrição de NOT NULL de um domínio:
ALTER DOMAIN zipcode DROP NOT NULL;
Para adicionar uma restrição de verificação a um domínio:
ALTER DOMAIN zipcode ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);
Para remover uma restrição de verificação de um domínio:
ALTER DOMAIN zipcode DROP CONSTRAINT zipchk;
Para mudar o nome da restrição de verificação em um domínio:
ALTER DOMAIN zipcode RENAME CONSTRAINT zipchk TO zip_check;
Para mover o domínio para um esquema diferente:
ALTER DOMAIN zipcode SET SCHEMA customers;
O comando ALTER DOMAIN está em conformidade com
o padrão SQL, exceto pelas variantes
OWNER, RENAME,
SET SCHEMA, e
VALIDATE CONSTRAINT, que são extensões do
PostgreSQL.
A cláusula NOT VALID da variante
ADD CONSTRAINT também é uma extensão do
PostgreSQL.