From: | "Christopher Kings-Lynne" <chriskl(at)familyhealth(dot)com(dot)au> |
---|---|
To: | "Thomas Good" <tomg(at)sqlclinic(dot)net>, "PostgreSQL SQL List" <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: CHECK CONSTRAINT blunder(s) |
Date: | 2002-05-15 05:23:04 |
Message-ID: | GNELIHDDFBOCMGBFGEFOIEJOCCAA.chriskl@familyhealth.com.au |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
> Can someone clue me in as to proper syntax for adding a not null
> check constraint? I've fumbled around a bit without much luck
> and I don't see this covered in the alter table section of the
> interactive docs.
>
> My pseudo code is:
> ALTER TABLE doof ADD CONSTRAINT bleibt_doof NOT NULL (record_id);
> But obviously this fails.
OK, Postgres doesn't currently have an SQL command for changing an
attributes NOT NULL property. There are a few options.
1) Add a CHECK constraint:
ATLER TABLE doof ADD CHECK (record_id IS NOT NULL);
This will work, but the column will still be of type 'null'.
2) Edit the catalogs
This isn't too hard:
UPDATE pg_attribute SET attnotnull = true WHERE attrelid = (SELECT oid FROM
pg_class WHERE relname = 'doof') AND attname = 'record_id';
You probably want to check that there's no NULL values in the column before
you do this. You can do it all in a transaction and LOCK the table as well
to make sure no-one adds NULL values while you're doing it.
3) I've attached two functions. Load them into your postgres. Just go:
SELECT kl_setnotnull('doof', 'record_id');
SELECT kl_setnull('doof', 'record_id');
These functions do all the proper locking and checking for you.
(These funcs are in the public domain BTW)
4) Wait for 7.3
The postgres CVS has a new command:
ALTER TABLE doof ALTER record_id SET NOT NULL;
ALTER TABLE doof ALTER record_id DROP NOT NULL;
FWIW, I recommend option (2) or (3) at the moment.
Cheers,
Chris
Attachment | Content-Type | Size |
---|---|---|
kl_setnotnull.sql | application/octet-stream | 1.2 KB |
kl_setnull.sql | application/octet-stream | 985 bytes |
From | Date | Subject | |
---|---|---|---|
Next Message | Christopher Kings-Lynne | 2002-05-15 09:22:23 | Re: some questions |
Previous Message | Ang Tun Chek | 2002-05-15 04:49:31 | some questions |