PostgreSQL: Миграция с MySQL - как сделать поле auto increment

Материал из PhpWiki.

Перейти к: навигация, поиск

Если неохота разбираться в тонкостях:

CREATE TABLE foo (
id SERIAL,
...
);

, и всё заработает.

Если есть желание разобраться: Для генерации «суррогатных» первичных ключей в Postgre SQL используются «последовательности» (SEQUENCE). Вышеприведённый пример на самом деле раскрывается в такую конструкцию:

CREATE SEQUENCE foo_id_seq;
CREATE TABLE foo (
id integer DEFAULT NEXTVAL('foo_id_seq'),
...
);

Замечание: До версии 7.3 поле типа serial автоматически объявлялось уникальным, то есть по нему создавался индекс CREATE UNIQUE INDEX foo_id_key ON foo (id);

Если делать ту же работу «вручную», то нагляднее всего (IMHO!) получается так:

CREATE SEQUENCE foo_seq;
CREATE TABLE foo (
id integer NOT NULL DEFAULT NEXTVAL('foo_seq'),
...,
PRIMARY KEY (id)
);

Если нужно (как чаще всего и бывает), чтобы поле заполнялось автоматически, не надо указывать его в команде INSERT вообще. При попытке вставить туда значение NULL или 0 возникнет ошибка.

Замечание: Последовательность совершенно не зависит от таблицы, при большом желании можно использовать одну и ту же последовательность для генерации ключей в разных таблицах. Вообще, возможности последовательностей в PostgreSQL значительно шире, чем auto_increment полей в MySQL. Как обычно, читайте документацию.

http://phpclub.ru/faq/
Ссылки
Реклама