バージョンごとのドキュメント一覧

5.3. アイデンティティ列 #

<title>Identity Columns</title>

An identity column is a special column that is generated automatically from an implicit sequence. It can be used to generate key values. 《機械翻訳》アイデンティティ列は、暗黙的な列から自動的に生成される特殊なシーケンスです。 これを使用してキー値を生成できます。

To create an identity column, use the <literal>GENERATED ... AS IDENTITY</literal> clause in <command>CREATE TABLE</command>, for example: 《機械翻訳》アイデンティティ列を作成するには、CREATE TABLE句のGENERATED.AS IDENTITYを使用します。 例の場合:

CREATE TABLE people (
    id bigint GENERATED ALWAYS AS IDENTITY,
    ...,
);

or alternatively 《機械翻訳》または

CREATE TABLE people (
    id bigint GENERATED BY DEFAULT AS IDENTITY,
    ...,
);

See <xref linkend="sql-createtable"/> for more details. 《機械翻訳》詳細はCREATE TABLEを参照してください。

If an <command>INSERT</command> command is executed on the table with the identity column and no value is explicitly specified for the identity column, then a value generated by the implicit sequence is inserted. For example, with the above definitions and assuming additional appropriate columns, writing 《機械翻訳》INSERTコマンドが列というアイデンティティを持つテーブルで実行され、列というアイデンティティに値が明示的に指定されていない場合、暗黙的なシーケンスによって生成された値が挿入されます。 例では、上記の定義を使用し、追加の適切な列を想定して、次のように記述します。

INSERT INTO people (name, address) VALUE ('A', 'foo');
INSERT INTO people (name, address) VALUE ('B', 'bar');

would generate values for the <literal>id</literal> column starting at 1 and result in the following table data: 《機械翻訳》は、1から始まるid列の値を生成し、結果は次のテーブルデータになります。

 id | name | address
----+------+---------
  1 | A    | foo
  2 | B    | bar

Alternatively, the keyword <literal>DEFAULT</literal> can be specified in place of a value to explicitly request the sequence-generated value, like 《機械翻訳》または、値の代わりにキーワードデフォルトを指定して、のようにシーケンスによって生成された値を明示的にリクエストすることもできます。

INSERT INTO people (id, name, address) VALUE (DEFAULT, 'C', 'baz');

Similarly, the keyword <literal>DEFAULT</literal> can be used in <command>UPDATE</command> commands. 《機械翻訳》同様に、キーワードDEFAULTUPDATEコマンドで使用できます。

Thus, in many ways, an identity column behaves like a column with a default value. 《機械翻訳》したがって、多くの点で、アイデンティティ列はデフォルト値のある列のように動作します。

The clauses <literal>ALWAYS</literal> and <literal>BY DEFAULT</literal> in the column definition determine how explicitly user-specified values are handled in <command>INSERT</command> and <command>UPDATE</command> commands. In an <command>INSERT</command> command, if <literal>ALWAYS</literal> is selected, a user-specified value is only accepted if the <command>INSERT</command> statement specifies <literal>OVERRIDING SYSTEM VALUE</literal>. If <literal>BY DEFAULT</literal> is selected, then the user-specified value takes precedence. Thus, using <literal>BY DEFAULT</literal> results in a behavior more similar to default values, where the default value can be overridden by an explicit value, whereas <literal>ALWAYS</literal> provides some more protection against accidentally inserting an explicit value. 《機械翻訳》デフォルト定義のALWAYSおよびBY DEFAULT句は、INSERTおよびUPDATEコマンドで明示的にユーザを指定した値を処理する方法を決定します。 INSERTコマンドでは、ALWAYSが選択されている場合、INSERTユーザがOVERRIDING SYSTEM VALUEを指定している場合にのみ、システム指定の値が受け入れられます。 BY DEFAULTを選択すると、ユーザで指定した値が優先されます。 したがって、BY DEFAULTを使用すると、明示的な値によってデフォルトを上書きできるデフォルト値値に似た動作になります。 一方、ALWAYSを使用すると、誤って明示的な値を挿入することに対する保護が強化されます。

The data type of an identity column must be one of the data types supported by sequences. (See <xref linkend="sql-createsequence"/>.) The properties of the associated sequence may be specified when creating an identity column (see <xref linkend="sql-createtable"/>) or changed afterwards (see <xref linkend="sql-altertable"/>). 《機械翻訳》識別データタイプの列は、順序でサポートされているデータタイプの1つである必要があります(CREATE SEQUENCEを参照)。 関連付けられたシーケンスのプロパティは、識別列の作成時に指定するか(CREATE TABLEを参照)、後で変更できます(ALTER TABLEを参照)。

An identity column is automatically marked as <literal>NOT NULL</literal>. An identity column, however, does not guarantee uniqueness. (A sequence normally returns unique values, but a sequence could be reset, or values could be inserted manually into the identity column, as discussed above.) Uniqueness would need to be enforced using a <literal>PRIMARY KEY</literal> or <literal>UNIQUE</literal> constraint. 《機械翻訳》アイデンティティ列は、自動的にNOT NULLとマークされます。 ただし、アイデンティティ列は一意性を保証しません。 (通常、シーケンスはユニーク値を戻しますが、シーケンスはリセットにするか、前述のようにアイデンティティ列に値を手動で挿入できます。) 一意性は、PRIMARY KEYまたはUNIQUE制約を使用して適用する必要があります。

In table inheritance hierarchies, identity columns and their properties in a child table are independent of those in its parent tables. A child table does not inherit identity columns or their properties automatically from the parent. During <command>INSERT</command> or <command>UPDATE</command>, a column is treated as an identity column if that column is an identity column in the table named in the statement, and the corresponding identity properties are applied. 《機械翻訳》テーブル継承階層では、子テーブルのID列およびそのプロパティは、親表のID列およびそのプロパティから独立しています。 子テーブルは、親から自動的にID列またはそのプロパティを継承しません。 INSERTまたはUPDATE時に、列がステートメントのテーブル記名的のID列であり、対応するIDプロパティが適用されている場合、その列はID列として扱われます。

Partitions inherit identity columns from the partitioned table. They cannot have their own identity columns. The properties of a given identity column are consistent across all the partitions in the partition hierarchy. 《機械翻訳》パーティションは、パーティション化されたテーブルからアイデンティティ列を継承します。 独自のアイデンティティ列を持つことはできません。 特定のアイデンティティ列のプロパティは、パーティション階層内のすべてのパーティションで一貫しています。