Создаём последовательности. Используем их в PRIMARY KEY.

Необходимо было использовать последовательности в PRIMARY KEY в таблицах. И так приступим.


Для начало создадим саму последовательность:

CREATE SEQUENCE test MINVALUE 1 INCREMENT 1;


Вы спросите зачем последовательность, если есть SERIAL ? Ответ: с последовательностью можно играться как душе угодно, сделать шаг не равный единице, изменить начальное состояние  т.д.

Может мой пример и не очень удобный(правильный), но это все, что мне пока пришло в голову. Итак продолжим, создадим простенькую табличку:

CREATE TABLE test_table(

   id INT PRIMARY_KEY,

   value INT

);

Теперь нужно создать процедуру(функцию), которая будет брать следующие значение из нашей последовательности, и возвращать её.

CREATE PROCEDURE test_sequence_nextval() RETURNING INTEGER

   RETURN test.NEXTVAL;

END PROCEDURE;

И последний штрих, создаём триггер на табличку test. Смысл триггера состоит в том, чтобы автоматом заполнять поле id следующим значением из последовательности test если это поле(id) будет нулевым.

CREATE TRIGGER test_serial INSERT ON test_table REFERENCING new AS n

   for each row when(n.id IS NULL)(

      EXECUTE FUNCTION test_sequence_nextval() INTO test.id)

Вот по идее и все.