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 возникнет ошибка.
http://center-fest.ru/postreleases/jenskie-shortyi-samyie-aktualnyie-modeli-sezona/
Замечание: Последовательность совершенно не зависит от таблицы, при большом желании можно использовать одну и ту же последовательность для генерации ключей в разных таблицах. Вообще, возможности последовательностей в PostgreSQL значительно шире, чем auto_increment полей в MySQL. Как обычно, читайте документацию.
http://phpclub.ru/faq/