## Name

ALTER DOMAIN — change the definition of a domain

## Synopsis

    ALTER DOMAIN name
        { SET DEFAULT expression | DROP DEFAULT }
    ALTER DOMAIN name
        { SET | DROP } NOT NULL
    ALTER DOMAIN name
        ADD domain_constraint
    ALTER DOMAIN name
        DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
    ALTER DOMAIN name
        OWNER TO new_owner

## Description

`ALTER DOMAIN` changes the definition of an existing domain. There are several sub-forms:

SET/DROP DEFAULT

  These forms set or remove the default value for a domain. Note that defaults only apply to subsequent `INSERT` commands; they do not affect rows already in a table using the domain.

SET/DROP NOT NULL

  These forms change whether a domain is marked to allow NULL values or to reject NULL values. You may only `SET NOT NULL` when the columns using the domain contain no null values.

ADD `domain_constraint`

  This form adds a new constraint to a domain using the same syntax as CREATE DOMAIN. This will only succeed if all columns using the domain satisfy the new constraint.

DROP CONSTRAINT

  This form drops constraints on a domain.

OWNER

  This form changes the owner of the domain to the specified user.

You must own the domain to use `ALTER DOMAIN`; except for `ALTER DOMAIN OWNER`, which may only be executed by a superuser.

## Parameters

`name`

  The name (possibly schema-qualified) of an existing domain to alter.

`domain_constraint`

  New domain constraint for the domain.

`constraint_name`

  Name of an existing constraint to drop.

`CASCADE`

  Automatically drop objects that depend on the constraint.

`RESTRICT`

  Refuse to drop the constraint if there are any dependent objects. This is the default behavior.

`new_owner`

  The user name of the new owner of the domain.

## Examples

To add a `NOT NULL` constraint to a domain:

    ALTER DOMAIN zipcode SET NOT NULL;

To remove a `NOT NULL` constraint from a domain:

    ALTER DOMAIN zipcode DROP NOT NULL;

To add a check constraint to a domain:

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

To remove a check constraint from a domain:

    ALTER DOMAIN zipcode DROP CONSTRAINT zipchk;

## Compatibility

The `ALTER DOMAIN` statement is compatible with SQL99, except for the `OWNER` variant, which is a PostgreSQL extension.