さらに、シーケンス内の次の値を変更する必要がある状況が発生した場合は、シーケンスをすぐにリセットして、テーブル内の次のエントリをどの値から開始するかを指定できます。 PostgreSQL でシーケンスをリセットする方法に関して知っておくべき詳細はすべて、この投稿で詳しく説明されています。見てください!
PostgreSQL でシーケンスをリセットする方法の例
INT 列を使用すると、自動インクリメント シーケンスを作成し、それをテーブルの主キーとして使用できます。こうすることで、整数値が自動的に生成されるため、INSERT クエリを実行するときにその値を入力する必要がなくなります。シーケンスが作成されたら、ALTER SEQUENCE コマンドを使用してシーケンスを再開し、新しいエントリの新しい開始値を指定できます。
この例では、次の「user_details」テーブルを使用します。ここで注目するのは、100 から始まる自動インクリメント シーケンスである「user_id」列です。
データベース内のさまざまなシーケンスをリストするには、次のコマンドを実行します。
\ds
この例では、「user_id」シーケンスをターゲットにします。
シーケンスの詳細を取得するには、次に示すように「select」クエリを実行します。
SELECT * FROM シーケンス名;
既存のシーケンスの最後の値が 104 であることがわかります。この値をリセットし、新しいエントリが持つ新しい値を定義します。
PostgreSQL シーケンスをリセットするには、次のコマンドを使用します。
ALTER SEQUENCE sequence_name RESTART WITH value;この例では、シーケンスを再起動して新しいエントリを 20 から開始するとします。次のコマンドを実行すると、次のような出力が得られ、シーケンスが変更されたことが確認されます。
前のコマンドを再実行して、SELECT ステートメントを使用してシーケンスの詳細を取得すると、この場合の新しい「last_value」が ALTER コマンドで指定した値であることがわかります。
新しいエントリをテーブルに挿入して、何が起こるかを見てみましょう。次の図は、INSERT クエリと SELECT ステートメントの実行後に得られる結果を示しています。新しいエントリの「user_id」が 20 に設定されていることに注目してください。作成するすべての新しいエントリの「user_id」は、最後の値 20 に基づいて生成されます。
別の入力を行うと、その「user_id」は 21 になり、シーケンスは同じロジックを使用して続行されます。これが、PostgreSQL でシーケンスをリセットする方法です。 「reset」コマンドは既存のレコードには影響しないことに注意してください。シーケンスをリセットした後に作成するエントリの新しい開始値を定義するだけです。
結論
PostgreSQL では、主キー列の整数値を自動生成する方法があるため、作業が簡素化されます。既存のシーケンスがある場合は、ALTER SEQUENCE を使用できます。
RESTART WITH オプションを指定してコマンドを使用して、リセットするシーケンスと、シーケンスの最後の値として設定する値を指定します。こうすることで、新しいエントリには、新しい最後の値に基づいて生成された整数値が含まれます。 PostgreSQL シーケンスのリセットがどのように機能するかを理解するには、提示された例を参照してください。