По умолчанию старт и приращение равны 1. Начнем с параметра ALWAYS и создадим аналог таблицы Printer_Inc, которая использовалась ранее для примеров в SQL Server:
Как видно, по умолчанию значения в столбце identity начинаются с 1 и увеличиваются с шагом 1.
Теперь попробуем вставить строку с заданным значением в столбце code:
INSERTINTO Printer_Inc VALUES
(3, 1003,'n','laser',850);
Сервер возвращает ошибку:
ERROR: Столбец "code" является столбцом идентификации со свойством GENERATED ALWAYS. В столбец "code" можно вставить только значение по умолчанию Hint: Для переопределения укажите OVERRIDING SYSTEM VALUE.
Такое поведение согласуется с поведением identity в SQL Server. Однако тут же дается совет использовать переопределение системного значения (OVERRIDING SYSTEM VALUE). Попробуем:
Таким образом, нумерация продолжится с последнего достигнутого значения последовательного счетчика, что потенциально приведет к ошибке (нарушения ограничения первичного ключа) при достижении значения 10.
Давайте теперь попробуем сдвинуть начало отсчета и заодно изменить шаг приращения для существующей таблицы:
-- Удалим последние строки для чистоты эксперимента
ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "printer_inc_pkey"SQL state: 23505Detail: Ключ "(code)=(40)" уже существует.
Т.е. PostgreSQL пытается продолжить нумерацию с последнего автоинкрементированного значения. Тогда придется передвинуть начальное значение и перезапустить identity: