Начальное значение SERIAL в PostgreSQL

как мне задать начальное значение для SERIAL в постгрес? Собираюсь использовать сериал для столбца id и я подумал,что лучше будет начать нумерацию айдишников ,скажем, с миллиона


Ответы (2 шт):

Автор решения: Roman Konoval

SERIALBIGSERIAL) это типы, которые автоматически создают SEQUENCE для генерации значения. При определении поля нет возможности влиять на то, как создается эта последовательность.

CREATE TABLE tablename (
    colname SERIAL
);

эквивалентно

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;

Нужно либо вручную ее создавать и поле определять так, что она использовалась. Т.е. сделать второй вариант заменив создание на:

CREATE SEQUENCE tablename_colname_seq START WITH 1000000;

Либо более простой способ - изменить ее паратметры после создания таблицы:

ALTER SEQUENCE tablename_colname_seq RESTART WITH 1000000
→ Ссылка
Автор решения: Мелкий

Воспользуйтесь стандартным синтаксисом (стандартным в том смысле, что определённом в SQL стандарте) GENERATED AS IDENTITY. Для этого синтаксиса, в отличии от синтаксического сахара-псевдотипа serial, реализована возможность задать параметры нижележащего sequence

create table tablename (
  id int generated always as identity (start 1000) primary key,
  -- прочие данные
);
→ Ссылка