Re: How to enforce the use of the sequence for serial columns ?
От | Donald Fraser |
---|---|
Тема | Re: How to enforce the use of the sequence for serial columns ? |
Дата | |
Msg-id | 004f01c71eaf$790c5570$7d64a8c0@demolish1 обсуждение исходный текст |
Ответ на | How to enforce the use of the sequence for serial columns ? ("Marc Mamin" <M.Mamin@intershop.de>) |
Список | 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
В списке pgsql-admin по дате отправления: