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 по дате отправления:

Предыдущее
От: "Marc Mamin"
Дата:
Сообщение: How to enforce the use of the sequence for serial columns ?
Следующее
От: Jerry Sievers
Дата:
Сообщение: Re: How to enforce the use of the sequence for serial columns ?