Автоинкрементные поля в PostgreSQL
Продолжение темы, начатой этим сообщением и посвященной автоинкрементальным полям.
В отличие от MySQL, в таблицах PostgreSQL автоинкрементальных полей может быть несколько. Для создания таких полей используются последовательности – sequence
.
sequence
– автоматический счётчик, для которого можно задавать начальное значение, конечное значение, шаг прироста, тип прироста (плюс, умножить и т.д.). Этот счётчик можно привязать к полю – полю будет присваиваться значение счетчика (если при вставке пользователь не определил значение поля), а счетчик будет автоматом наращиваться.
serial
– он автоматом выполнит действия по созданию последовательности и привязки ее к полю. Тип serial
может быть использован только при создании таблицы. Если при создании таблицы некоторые поля имеют тип serial
, то для каждого из этих полей выполняются следующие действия:
- создается последовательность с именем tblname_colname_seq;
- тип поля меняется с
serial
наinteger
; - в модификаторы поля добавляется конструкция
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)
Комментарии
Оставить комментарий
your_ip_is_blacklisted_by sbl.spamhaus.org
(#) Someone:
Спасибо, пригодилось.
Для полноты картины было бы неплохо добавить, что создавать автоинкрементируемые поля других int-типов (например bigint) можно, например вот так:
CREATE SEQUENCE user_id_seq;
CREATE TABLE user ( user_id bigint NOT NULL DEFAULT nextval(„user_id_seq“)
);