DROP SEQUENCE next_id; DROP TABLE ids; CREATE SEQUENCE next_id START -2 MINVALUE -2; CREATE TABLE ids ( id int4, idesc text ); CREATE TRIGGER ids_nextid BEFORE INSERT OR UPDATE ON ids FOR EACH ROW EXECUTE PROCEDURE autoinc (id, next_id); INSERT INTO ids VALUES (0, 'first (-2 ?)'); INSERT INTO ids VALUES (null, 'second (-1 ?)'); INSERT INTO ids(idesc) VALUES ('third (1 ?!)'); SELECT * FROM ids; UPDATE ids SET id = null, idesc = 'first: -2 --> 2' WHERE idesc = 'first (-2 ?)'; UPDATE ids SET id = 0, idesc = 'second: -1 --> 3' WHERE id = -1; UPDATE ids SET id = 4, idesc = 'third: 1 --> 4' WHERE id = 1; SELECT * FROM ids; SELECT 'Wasn''t it 4 ?' as nextval, nextval ('next_id') as value; insert into ids (idesc) select textcat (idesc, '. Copy.') from ids; SELECT * FROM ids;