ALTER DOMAIN

ALTER DOMAIN — modifica a definição de um domínio

Sinopse

ALTER DOMAIN nome_do_domínio
    { SET DEFAULT expressão | DROP DEFAULT }
ALTER DOMAIN nome_do_domínio
    { SET | DROP } NOT NULL
ALTER DOMAIN nome_do_domínio
    ADD restrição_de_domínio [ NOT VALID ]
ALTER DOMAIN nome_do_domínio
    DROP CONSTRAINT [ IF EXISTS ] nome_da_restrição [ RESTRICT | CASCADE ]
ALTER DOMAIN nome_do_domínio
     RENAME CONSTRAINT nome_da_restrição TO novo_nome_da_restrição
ALTER DOMAIN nome_do_domínio
    VALIDATE CONSTRAINT nome_da_restrição
ALTER DOMAIN nome_do_domínio
    OWNER TO {
        novo_dono
      | CURRENT_ROLE
      | CURRENT_USER
      | SESSION_USER
    }
ALTER DOMAIN nome_do_domínio
    RENAME TO novo_nome
ALTER DOMAIN nome_do_domínio
    SET SCHEMA novo_esquema

onde restrição_de_domínio é:

[ CONSTRAINT nome_da_restrição ]
{ NOT NULL | CHECK (expressão) }

Descriçã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 CONSTRAINT

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

OWNER

Esta forma altera o dono do domínio para o usuário especificado.

RENAME

Esta forma altera o nome do domínio.

SET SCHEMA

Esta 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.)

Parâmetros

nome_do_domínio

O nome (possivelmente qualificado pelo esquema) do domínio existente a ser alterado.

restrição_de_domínio

A nova restrição de domínio para o domínio.

nome_da_restrição

O nome da restrição existente para remover ou alterar o nome.

NOT VALID

Não verifica os dados armazenados existentes quanto à validade da restrição.

CASCADE

Remove automaticamente os objetos que dependem da restrição e, por sua vez, todos os objetos que dependem desses objetos (veja Acompanhamento de dependência).

RESTRICT

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

novo_nome

O novo nome para o domínio.

novo_nome_da_restrição

O novo nome para a restrição.

novo_dono

O nome de usuário do novo dono do domínio.

novo_esquema

O novo esquema para o domínio.

Notas

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.

Exemplos

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;

Conformidade

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.

Veja também

CREATE DOMAIN, DROP DOMAIN