postgresqlのシーケンスnextvalの詳細


一、postgresqlのシーケンス
1.1シーンの需要
下図のように、製品コードにシーケンスを設定する必要があります。符号化ルールSKU+シリアル番号:

1.2シーケンス
シーケンスはビギナートアルゴリズムに基づくので、8バイトの整数の範囲を超えてはいけない。
nextvalとsetvalコールは絶対にロールバックしませんので、順序の「隙間なし」割り当てが必要であれば、シーケンスオブジェクトは使用できません。1つのカウンターのみを含むテーブルに排他的なロックを使用してギャップのない割り当てを構築することができるが、このスキームはシーケンスオブジェクトオーバーヘッドよりも大きく、特に多くのトランザクションが同時にプロローグを要求する場合には、
構文の作成と使用:

CREATE SEQUENCE serial START 101;
SELECT nextval('serial');
 nextval
---------
 101
このセクションでは、シーケンスオブジェクトを操作するための関数を説明します。シーケンスオブジェクトは、シーケンスジェネレータまたはシーケンスとも呼ばれます。
シーケンスオブジェクトは、CREATE SEQUEnceで作成された特殊なシングル行テーブルです。
シーケンスオブジェクトは、通常、表の行のために一意の識別子を生成するために使用される。
表に記載されているこれらのシーケンス関数は、シーケンスオブジェクトから連続的なシーケンス値を取得するための簡単な、マルチユーザの安全な方法を提供してくれます。

シーケンス値を取得するのは安全です。他のキーと組み合わせて一意のプライマリキーを形成することができます。
補足:PostgreSQLのシーケンス関連関数nextval、currval、lastval、setval、setval
PostgreSQLにおけるシーケンスが主に関与する関数は、
関数
タイプを返します
説明
nextval(regclass)
ビギナート
シーケンスオブジェクトを次の数値にインクリメントし、値を返します。この動作は自動的に行われます。複数のセッションが同時にnextvalを実行しても、プロセス毎に一意のシーケンス値が安全に受信されます。
currval(regclass)
ビギナート
現在のセッションでは、一番近いnextvalが捉えたシーケンスの値を返します。本セッションでこのシーケンスでnextvalを使用したことがない場合、エラーを報告します。)この関数はセッション範囲の値を返し、他のセッションがnextvalを実行したかどうかを判断するためにも予測可能な結果を与えることができるので、注意してください。
lastval()
ビギナート
現在のセッションで一番近いnextvalが返した値を返します。この関数はcurrvalに相当します。ただし、シーケンス名はパラメータではなく、現在のセッションで一番近いnextvalで使用されているシーケンスをキャプチャします。現在のセッションがnextvalを起動していない場合、lastvalを呼び出すとエラーが発生します。
setval(regclass,bigint)
ビギナート
シーケンスオブジェクトのカウンタ値をリセットします。シーケンスのlast_を設定しますvalueフィールドは指定された値で、そのis_を返します。caledフィールドはtrueに設定されており、次のnextvalは戻り値の前にシーケンスをインクリメントすることを示しています。
setval(regclass,bigint,bollan)
ビギナート
シーケンスオブジェクトのカウンタ値をリセットします。機能は上のsetval関数に相当します。is_だけです。caledはtrueまたはfalseに設定できます。falseに設定すると、次のnextvalはその値を返し、その後のnextvalはシーケンスの増分を開始します。
注意シーケンス名に大文字がある場合、regclassパラメータ値はダブルクォーテーションマークで囲む必要があります。例えば、

select nextval('"ACT_ChecklistItem_Id_seq"');
setval関数以外に、sequenceのstart_を修正する方法もあります。valueは、シーケンスの現在値を更新します。
プロジェクト展開にはいくつかの基礎データを挿入する必要がありますので、データが追加されたIDは1からではなく、Sequenceのstartを修正します。value(次はnextvalを実行してもらいます。得たのはstart_です。value、start_ではありません。value+1)

alter sequence s_seq restart with 2
に相当する

select setval('s_seq',2,false)
以上は個人の経験ですので、参考にしていただければと思います。間違いがあったり、完全に考えていないところがあれば、教えてください。