How to enforce the use of the sequence for serial columns ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Title: How to enforce the use of the sequence for serial columns ?

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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux