PostgreSQLで自動的に自動採番する

PostgreSQLMySQLのAUTO_INCREMENTのように自動で採番したい場合はSERIAL型を指定する。

 cookbook=# create table recipes (
 cookbook(#     id serial primary key,
 cookbook(#     title varchar(255),
 cookbook(#     description varchar(255),
 cookbook(#     instructions text,
 cookbook(#     date date);
 NOTICE:  CREATE TABLE will create implicit sequence "recipes_id_seq" for "serial" column "recipes.id"
 CREATE TABLE
 cookbook(# \d
               List of relations
 Schema |       Name        |   Type   | Owner
--------+-------------------+----------+-------
 public | recipes           | table    | cookbook
 public | recipes_id_seq    | sequence | cookbook

この様にすることで、テーブル作成と同時にシーケンスが作成され、レコード挿入時にシーケンスから採番された値が自動的に設定されるようになる。

Serial型のからくりは、作成した表の定義を見てみるとわかるとおり、実際の型はinteger で default句を使用してシーケンスから値をとってくるようになっている。