Re: [HACKERS] domain feature - details

Marc G. Fournier <scrappy@hub.org>

From: The Hermit Hacker <scrappy@hub.org>
To: Mattias Kregert <matti@algonet.se>
Cc: al dev <aldevpgsql@yahoo.com>, pgsql-hackers@postgreSQL.org
Date: 1998-03-06T13:33:25Z
Lists: pgsql-hackers
On Fri, 6 Mar 1998, Mattias Kregert wrote:

> al dev wrote:
> > 
> > Hi all:
> > More details on what domains are. Domains are global
> > column definitions, upon which column definitions
> > can be based. A domain specifies a data type, and a
> > set of column attributes and constraints. Subsequent
> > table definitions can use the domain to define columns.
> > 
> > Here is the detail for 'ALTER DOMAIN' feature. I
> > pulled this off the chapter 42 at
> > http://sunsite.unc.edu/LDP/HOWTO/Database-HOWTO.html> 
> > <alter domain statement> ::=
> >          ALTER DOMAIN <domain name> <alter domain action>
> > 
> >      <alter domain action> ::=
> >            <set domain default clause>
> >          | <drop domain default clause>
> >          | <add domain constraint definition>
> >          | <drop domain constraint definition>
> 
> What happens if I change a DOMAIN after I have created tables with
> it? Does CONSTRAINT's and DEFAULTS and TYPES change for those tables,
> or should it only affect tables created after the change?
> 
> Suppose I do this:
> 1. I create DOMAIN for "Person", and create lots of tables with
>   Person columns.
> 2. After some weeks, I want to CONSTRAIN Person to disallow NULL
>   social security number, so I change the "Person" DOMAIN.
> 
> Do I have to re-create all tables, or will the change take effect
> immediately? Will some changes take effect, like default and constraint,
> but not the data type? Or will changes in data type cause the tables
> to be modified? Will the database lock the tables and convert them
> when I type the ALTER command?

	If I'm understanding what has been said, then this will affect any
table that uses that domain...same as a 'view' that does a subselect will
change its results based on how the data changes in the subselect..

	In a sense, I sort of see a DOMAIN as being similar to a trigger,
where, upon INSERT, you check the value being entered for a specific range
of values...