Автоинкрементные поля в PostgreSQL

Продолжение темы, начатой этим сообщением и посвященной автоинкрементальным полям.

В отличие от MySQL, в таблицах PostgreSQL автоинкрементальных полей может быть несколько. Для создания таких полей используются последовательности – sequence.

sequence – автоматический счётчик, для которого можно задавать начальное значение, конечное значение, шаг прироста, тип прироста (плюс, умножить и т.д.). Этот счётчик можно привязать к полю – полю будет присваиваться значение счетчика (если при вставке пользователь не определил значение поля), а счетчик будет автоматом наращиваться.

Для упрощения жизни разработчики PostgreSQL сделали псевдотип serial – он автоматом выполнит действия по созданию последовательности и привязки ее к полю. Тип serial может быть использован только при создании таблицы. Если при создании таблицы некоторые поля имеют тип serial, то для каждого из этих полей выполняются следующие действия:
  1. создается последовательность с именем tblname_colname_seq;
  2. тип поля меняется с serial на integer;
  3. в модификаторы поля добавляется конструкция not null default nextval('tblname_colname_seq'::regclass)1.

Если нужно сделать автоинкрементальным поле уже существующей таблицы, то сперва нужно создать последовательность:

CREATE SEQUENCE tblname_colname_seq;

а затем изменить модификатор поля:

ALTER TABLE tblname
ALTER COLUMN 'colname'
SET DEFAULT NEXTVAL('tblname_colname _seq'::regclass);

1 в 7-ых версиях PostgreSQL необходимо использовать такой модификатор: not null default nextval('public.tblname_colname_seq'::text)

Поделиться в FacebookДобавить в TwitterДобавить в Telegram

Комментарии

  1. (#)   Someone:

    Спасибо, пригодилось.

    Для полноты картины было бы неплохо добавить, что создавать автоинкрементируемые поля других int-типов (например bigint) можно, например вот так:

    CREATE SEQUENCE user_id_seq;
    CREATE TABLE user ( user_id bigint NOT NULL DEFAULT nextval(„user_id_seq“)
    );


Оставить комментарий

Ответ на Автоинкрементные поля в PostgreSQL