Создаём последовательности. Используем их в 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) |
Вот по идее и все.