PostgreSQL SERIAL自己増分列の作成


PostgreSQL SERIAL自己増分列の作成
この文書では、PostgreSQL SERIALについて説明し、serialタイプを使用してテーブルの自己増分列を作成する方法を示します.
PostgreSQL SERIAL擬似タイプ
PostgreSQLシーケンスは、整数シーケンスデータベースオブジェクトを生成するために特別なものです.シーケンスは通常、mysqlのAUTO_とプライマリ・キー列に使用されます.INCREMENTの概念は似ている.テーブルの作成時にserial擬似タイプを使用してシーケンスを定義します.
CREATE TABLE table_name(
    id SERIAL
);

ID列にserial疑似タイプを割り当てます.PostgreSQLでは、次の手順に従います.
  • シーケンスオブジェクトを作成し、次の生成値をカラムのデフォルト値として設定します.
  • は、シーケンスが常に整数値を生成しnull値にならないため、対応するカラムにNOT NULL制約を追加します.
  • は、シーケンスの所有者にid列を付与するため、id列またはテーブルが削除されると、シーケンスオブジェクトが自動的に削除される.

  • バックグラウンド実行文に対応:
    CREATE TABLE table_name(
        id SERIAL
    );
    

    次の文を実行したことに相当します.
    CREATE SEQUENCE table_name_id_seq;
     
    CREATE TABLE table_name (
        id integer NOT NULL DEFAULT nextval('table_name_id_seq')
    );
     
    ALTER SEQUENCE table_name_id_seq
    OWNED BY table_name.id;
    

    PostgreSQLは、SMALLSERIAL、SERIAL、BIGSERIALの3つのシーケンス擬似タイプを提供し、対応範囲は以下の通りです.
    Name
    Storage Size
    Range
    SMALLSERIAL
    2 bytes
    1 to 32,767
    SERIAL
    4 bytes
    1 to 2,147,483,647
    BIGSERIAL
    8 bytes
    1 to 922,337,2036,854,775,807
    PostgresQL SERIAL例
    特に、serialカラムは、カラムにインデックスまたはプライマリ・キー・カラムを暗黙的に作成しません.もちろん、PRIMARY KEYキーワードを使用して、対応する制約を簡単に追加できます.次の文はfruitsテーブルを作成します.idクラスはserialタイプです.
    CREATE TABLE fruits(
       id SERIAL PRIMARY KEY,
       name VARCHAR NOT NULL
    );
    

    Insert文では、対応するカラムを無視したりdefaultキーワードを使用したりしてserialに値を割り当てることができます.例を参照してください.
    INSERT INTO fruits(name) VALUES('orange');
    

    または、
    INSERT INTO fruits(id,name) VALUES(DEFAULT,'apple');
    

    PostgreSQLはfruitsテーブルに2行のレコードを挿入し、idの値は1と2です.
    SELECT * 
    FROM fruits;
    
     id |  name
    ----+--------
      1 | apple
      2 | orange
    (2 rows)
    

    pg_の使用get_serial_sequence関数はserial列のシーケンス名を取得します.
    pg_get_serial_sequence('table_name','column_name')
    

    現在生成されている値は、currval関数にシーケンス名を入力することで取得できます.たとえば、次の文は、最近生成された値を返します.
    SELECT currval(pg_get_serial_sequence('fruits', 'id'));
    

    結果を返します.
    currval
    ---------
    2
    (1 row)
    

    Insert文が実行されると、シーケンス生成の値を取得したい場合は、insert文でRETURNING id句を使用して実装できます.次の文は、新しいレコードの行を挿入し、id列で生成された値を返します.
    INSERT INTO fruits(name) VALUES('banana')
    RETURNING id;
    

    結果は次のとおりです.
    id
    ----
    3
    (1 row)
    

    シーケンス・ジェネレータはトランザクション・セキュリティではありません.つまり、2つの同時データベース接続がシーケンスから次の値を取得しようとすると、クライアントごとに異なる値が得られます.クライアントがトランザクションをロールバックすると、シーケンス値が破棄され、シーケンス値が不連続になります.
    まとめ
    本稿では、serialデータ型を使用して、データテーブルに自己増分列を作成する方法について説明します.