TL; Postgresの10で今DR
は、SQL標準に従ってGENERATED BY DEFAULT AS IDENTITY
を指定します。
create table tower
(
npages integer,
ifnds integer,
ifnid integer,
name varchar(20),
towid integer GENERATED BY DEFAULT AS IDENTITY -- per SQL standard
)
ID列
Postgresの10は今identity columnの概念をサポートし、標準のSQL構文を使用しています。私はMS SQL Serverの専門家ではありませんが、この新しい標準サポートは同等であると私は信じています。 CREATE TABLE
中に使用
GENERATED … AS IDENTITY
GENERATED … AS IDENTITY
コマンドは、暗黙的シーケンスを生成します。 SERIAL
とは異なり、そのシーケンスの作成、命名、許可、および削除はあなたには透過的です。非常に直感的です。テーブルへの使用許可を与えると、シーケンスに対する許可を得ます。表をドロップすると、シーケンスは自動的にドロップされます。
標準構文の2つの味です。その違いは、値を生成させるのではなく、値を渡す場合にのみ重要です。通常、人々は常に生成された価値に頼っているので、通常は最初のバージョンGENERATED BY DEFAULT AS IDENTITY
を使用します。
GENERATED BY DEFAULT AS IDENTITY
INSERT
コマンドが値を提供しない限り、値を生成します。
GENERATED ALWAYS AS IDENTITY
を指定しない限り、INSERT
が提供する任意の値を無視します。
Read this interesting page Peter Eisentrautによる。彼はSERIAL
で奇妙な問題を説明します。新しいID列機能にはこのような問題はありません。だから、もう使用する理由はありません.、悪い面もなく、悪い面もあります。 SERIAL
は、GENERATED … AS IDENTITY
に置き換えられます。
ID列は、必ずしも主キーである必要はなく、自動的には索引付けされないことに注意してください。だからあなたが意図している場合は、明示的にPRIMARY KEY
を指定する必要があります(通常はそうであるように)。
CREATE TABLE person_ (
id_
INTEGER
GENERATED BY DEFAULT AS IDENTITY -- Replaces SERIAL. Implicitly creates a SEQUENCE, specified as DEFAULT.
PRIMARY KEY -- Creates index. Specifies UNIQUE. Marks column for relationships.
,
name_
VARCHAR(80)
) ;
内部実装の詳細を非表示にすることを意図しています。カバーの下に生成されるシーケンスの名前を知る必要はありません。たとえば、列を介してカウンターをリセットするには、基本的なシーケンスを知らなくてもかまいません。暗黙
ALTER TABLE person_
ALTER COLUMN id_
RESTART WITH 1000 -- Reset sequence implicitly, without a name.
;
指定アイデンティティ:
- マーク列
NOT NULL
- は、配列のタイプは、列(32ビット、64ビット等と一致
- ネクタイ
- は列が
の名前を変更した場合でも、列に縛られたまま落下塔へのシーケンス
- 継承権限
- カスケードは、デフォルトのソースとして順序を指定します。その列の値
ID列はCREATE SEQUENCE
と同じオプションを取ることができます:
オプションの愚かな例:
使用は 'のPostgresにNULL'ないシリアルtowid:https://www.postgresql.org/docs/current/static/datatype- numeric.html#DATATYPE-SERIAL –