ALTER DOMAIN

ALTER DOMAIN — cambiar la definición de un dominio

Synopsis

ALTER DOMAIN name
    { SET DEFAULT expression | DROP DEFAULT }
ALTER DOMAIN name
    { SET | DROP } NOT NULL
ALTER DOMAIN name
    ADD domain_constraint [ NOT VALID ]
ALTER DOMAIN name
    DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
ALTER DOMAIN name
     RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER DOMAIN name
    VALIDATE CONSTRAINT constraint_name
ALTER DOMAIN name
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER DOMAIN name
    RENAME TO new_name
ALTER DOMAIN name
    SET SCHEMA new_schema

donde domain_constraint es:

[ CONSTRAINT constraint_name ]
{ NOT NULL | CHECK (expression) }

Descripción

ALTER DOMAIN cambia la definición de un dominio existente. Existen varias variantes:

SET/DROP DEFAULT

Estas formas establecen o eliminan el valor predeterminado para un dominio. Ten cuenta que los valores predeterminados solo se aplican a los comandos INSERT posteriores; no afectan a las filas que ya existen en una tabla que utilice el dominio.

SET/DROP NOT NULL

Estas formas cambian si un dominio está marcado para permitir valores NULL o para rechazarlos. Solo puedes ejecutar SET NOT NULL cuando las columnas que usan el dominio no contienen valores nulos.

ADD domain_constraint [ NOT VALID ]

Esta forma agrega una nueva restricción a un dominio. Cuando se agrega una nueva restricción a un dominio, todas las columnas que usan ese dominio se verificarán con respecto a la restricción recién agregada. Estas comprobaciones se pueden omitir agregando la nueva restricción con la opción NOT VALID; la restricción se puede validar más adelante usando ALTER DOMAIN ... VALIDATE CONSTRAINT. Las filas recién insertadas o actualizadas siempre se comprueban con respecto a todas las restricciones, incluso aquellas marcadas como NOT VALID. NOT VALID solo se acepta para restricciones CHECK.

DROP CONSTRAINT [ IF EXISTS ]

Esta forma elimina restricciones de un dominio. Si se especifica IF EXISTS y la restricción no existe, no se lanza ningún error, sino que se emite un aviso (notice) en su lugar.

RENAME CONSTRAINT

Esta forma cambia el nombre de una restricción en un dominio.

VALIDATE CONSTRAINT

Esta forma valida una restricción agregada previamente como NOT VALID, es decir, verifica que todos los valores en las columnas de tabla del tipo de dominio cumplan con la restricción especificada.

OWNER

Esta forma cambia el propietario del dominio al usuario especificado.

RENAME

Esta forma cambia el nombre del dominio.

SET SCHEMA

Esta forma cambia el esquema del dominio. Cualquier restricción asociada con el dominio también se mueve al nuevo esquema.

Debes ser el propietario del dominio para usar ALTER DOMAIN. Para cambiar el esquema de un dominio, también debes tener el privilegio CREATE en el nuevo esquema. Para alterar el propietario, debes poder hacer SET ROLE al nuevo rol propietario, y ese rol debe tener el privilegio CREATE en el esquema del dominio. (Estas restricciones garantizan que al cambiar el propietario no puedas hacer nada que no pudieras hacer eliminando y recreando el dominio. Sin embargo, un superusuario puede cambiar la propiedad de cualquier dominio de todos modos).

Parámetros

name

El nombre (posiblemente calificado por esquema) de un dominio existente a modificar.

domain_constraint

Nueva restricción de dominio para el dominio.

constraint_name

Nombre de una restricción existente a eliminar o renombrar.

NOT VALID

No verificar los datos almacenados existentes para la validez de la restricción.

CASCADE

Eliminar automáticamente los objetos que dependen de la restricción y, a su vez, todos los objetos que dependen de esos objetos (ver Section 5.15).

RESTRICT

Rechazar la eliminación de la restricción si existen objetos dependientes. Este es el comportamiento predeterminado.

new_name

El nuevo nombre para el dominio.

new_constraint_name

El nuevo nombre para la restricción.

new_owner

El nombre de usuario del nuevo propietario del dominio.

new_schema

El nuevo esquema para el dominio.

Notas

Aunque ALTER DOMAIN ADD CONSTRAINT intenta verificar que los datos almacenados existentes cumplan con la nueva restricción, esta comprobación no es infalible, porque el comando no puede ver las filas de la tabla que se acaban de insertar o actualizar y que aún no han sido confirmadas (committed). Si existe el riesgo de que las operaciones concurrentes puedan insertar datos incorrectos, la forma de proceder es agregar la restricción utilizando la opción NOT VALID, confirmar ese comando, esperar hasta que todas las transacciones iniciadas antes de esa confirmación hayan terminado y luego ejecutar ALTER DOMAIN VALIDATE CONSTRAINT para buscar datos que violen la restricción. Este método es confiable porque, una vez confirmada la restricción, se garantiza que todas las transacciones nuevas la aplicarán a los nuevos valores del tipo de dominio.

Actualmente, ALTER DOMAIN ADD CONSTRAINT, ALTER DOMAIN VALIDATE CONSTRAINT y ALTER DOMAIN SET NOT NULL fallarán si el dominio especificado o cualquier dominio derivado se utiliza dentro de una columna de tipo contenedor (una columna compuesta, de matriz o de rango) en cualquier tabla de la base de datos. Deberían mejorarse en el futuro para poder verificar la nueva restricción para tales valores anidados.

Ejemplos

Para agregar una restricción NOT NULL a un dominio:

ALTER DOMAIN zipcode SET NOT NULL;

Para eliminar una restricción NOT NULL de un dominio:

ALTER DOMAIN zipcode DROP NOT NULL;

Para agregar una restricción check a un dominio:

ALTER DOMAIN zipcode ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);

Para eliminar una restricción check de un dominio:

ALTER DOMAIN zipcode DROP CONSTRAINT zipchk;

Para renombrar una restricción check en un dominio:

ALTER DOMAIN zipcode RENAME CONSTRAINT zipchk TO zip_check;

Para mover el dominio a un esquema diferente:

ALTER DOMAIN zipcode SET SCHEMA customers;

Compatibilidad

ALTER DOMAIN cumple con el estándar SQL, excepto por las variantes OWNER, RENAME, SET SCHEMA, y VALIDATE CONSTRAINT, que son extensiones de PostgreSQL. La cláusula NOT VALID de la variante ADD CONSTRAINT también es una extensión de PostgreSQL.

Véase también

CREATE DOMAIN, DROP DOMAIN