| From: | "Donald Fraser" <postgres(at)kiwi-fraser(dot)net> |
|---|---|
| To: | "[ADMIN]" <pgsql-admin(at)postgresql(dot)org> |
| Subject: | Re: How to enforce the use of the sequence for serial columns ? |
| Date: | 2006-12-13 12:08:59 |
| Message-ID: | 004f01c71eaf$790c5570$7d64a8c0@demolish1 |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-admin |
How to enforce the use of the sequence for serial columns ?There are many
ways, here are a couple to think about:
1)
Revoke all access to the table and then create a VIEW to access the table
where by you simply don't use column "id" in the VIEWs insert / update
statements.
2)
Manually retrieve the serial number from a trigger function and modify
column "id" in the function.
Regards
Donald Fraser
----- Original Message -----
From: Marc Mamin
I'd like to ensure that nobody provide the ID in an insert statement when
the id is linked to a sequence.
I tried it with a trigger, but the id value is fed before the "BEFORE
INSERT" test is performed (see below)...
Any Idea ?
Cheers,
Marc
CREATE FUNCTION serialtest() RETURNS trigger AS $serialtest$
BEGIN
-- Check that the id is provided
IF NEW.id IS NOT NULL THEN
RAISE EXCEPTION 'id will be set from a sequence; do not provide
it!';
END IF;
RETURN NEW;
END;
$serialtest$ LANGUAGE plpgsql;
CREATE TABLE test_table
(
id serial primary key,
foo int
);
CREATE TRIGGER test BEFORE INSERT OR UPDATE ON test_table
FOR EACH ROW EXECUTE PROCEDURE serialtest();
insert into test_table(foo)values(1);
ERROR: id will be set from a sequence; do not provide it!
SQL state: P0001
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Jerry Sievers | 2006-12-13 14:08:26 | Re: How to enforce the use of the sequence for serial columns ? |
| Previous Message | Marc Mamin | 2006-12-13 11:46:10 | How to enforce the use of the sequence for serial columns ? |