Thread: Changing column constraints?

Changing column constraints?

From
Henry Holland
Date:
Hi,

If I have a column constraint:addr_type char( 10 ) default 'street'CHECK( addr_type = 'street' || addr_type = 'pobox'
),
in a table, how can I add another choice to the list after I've already
entered data into the table?

Henry






Re: Changing column constraints?

From
"Josh Berkus"
Date:
Henry,

> If I have a column constraint:
>     addr_type char( 10 ) default 'street'
>     CHECK( addr_type = 'street' || addr_type = 'pobox' ),
> in a table, how can I add another choice to the list after I've
>  already
> entered data into the table?

Three options:

One, drop and rebuild the table with the constraint modified.  Sorry,but until we have ALTER CONSTRAINT implemented,
thisis the onlysimple way to modify and exisiting constraint.
 

Two, mess with system tables to alter the constraint.  I do notreccomend this.

Three, drop and re-build the table, and this time do it right: havecolumn addr_type reference another table called
"addr_types"that listthe acceptable type values.  Then use a foriegn key to enforce this.
 

-Josh Berkus


Re: Changing column constraints?

From
Stephan Szabo
Date:
On Thu, 21 Feb 2002, Josh Berkus wrote:

> Henry,
>
> > If I have a column constraint:
> >     addr_type char( 10 ) default 'street'
> >     CHECK( addr_type = 'street' || addr_type = 'pobox' ),
> > in a table, how can I add another choice to the list after I've
> >  already
> > entered data into the table?
>
> Three options:
>
> One, drop and rebuild the table with the constraint modified.  Sorry,
>  but until we have ALTER CONSTRAINT implemented, this is the only
>  simple way to modify and exisiting constraint.

Umm... on 7.2 you should be able to drop the existing constraint
and add a new one.  If you don't name the constraint you have to
find the internally generated name for the constraint from pg_relcheck
however.

> Three, drop and re-build the table, and this time do it right: have
>  column addr_type reference another table called "addr_types" that list
>  the acceptable type values.  Then use a foriegn key to enforce this.

This is probably happier in any case...