docs から :
データ型smallserial
、serial
およびbigserial
は真の型ではありませんが、一意の識別子列を作成するための表記上の便宜にすぎません(他のデータベースでサポートされているAUTO_INCREMENTプロパティと同様)。現在の実装では、以下を指定します:
CREATE TABLE tablename (
colname SERIAL
);
以下を指定するのと同じです:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
したがって、整数列を作成し、そのデフォルト値がシーケンスジェネレーターから割り当てられるように配置しました。 NULL値を挿入できないようにするために、NOTNULL制約が適用されます。 (ほとんどの場合、重複する値が誤って挿入されるのを防ぐために、UNIQUEまたはPRIMARY KEY制約を添付することもできますが、これは自動ではありません。)最後に、シーケンスは列に「所有者」としてマークされるため、列またはテーブルが削除されると削除されます。