LoginSignup
1
1

More than 3 years have passed since last update.

Postgresでシーケンス作成

Posted at

はじめに

テーブル作成の際にシーケンスを使用・テスト時にエラーが発生し解消したので
今後のために書き留めておく。

シーケンスとは

シークエンス(sequence)、シークエンシング(sequencing)は、一般には「連続」「順序」という意味を持つ。シークェンス、シーケンスとも。

Wikipedia

テーブルでデータを一意に特定するために使用します。

作成方法

以下のコマンドで作成出来ます。


CREATE SEQUENCE seq_no
 START WITH     1
 INCREMENT BY   1
 MAXVALUE 100
 NOCYCLE;

seq_noという名前のシーケンスを作成します。

START WITH:順序番号の初期値です。

INCREMENT BY:インクリメントする値を設定します。
         例えば2にすると「1, 3, 5, 7 ...」という感じにインクリメントされます。

MAXVALUE:順序の最大値を指定します。

NOCYCLE:順序が最大値または最小値に達した場合は、それ以上値を生成しないように指定できます。

他にもMINVALUEなど様々な指定が出来ます。

以下のページを参考にしました。
Oracle® Database SQL言語リファレンス

シーケンスがずれてしまった

無事にシーケンスも作成し、テスト環境で動作も確認し安心していたところ
次の日に以下のエラーが発生。

duplicate key value violates unique constraint

コードも確認して、シーケンスも問題ない、なぜ、、、

テーブルのレコードを確認してみると追加した覚えのないレコードがたくさん。
原因は他のメンバーが該当テーブルにてデータをコピーしていたため
シーケンスがずれてしまったようです。

以下の手順で修正

次の採番値を確認


SELECT nextval('テーブル名_シーケンス名_seq');

次の採番値をテーブルのデータに合わせる


SELECT setval('テーブル名_シーケンス名_seq', (SELECT MAX(シーケンス名) FROM テーブル名));

以上。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1