OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

AUTO_INCREMENT列の番号をリセットする方法

公開日:
更新日:
基本操作
#シーケンス

はじめに

Verticaは他のDBと同様にAUTO_INCREMENTを利用することで、データに一意の番号を振ることができます。
洗替え処理をしているシステムでは、番号をリセットして、一から採番しなおしたい場合があるかと思います。
今回はその方法をご紹介します。

ALTER SEQUENCE構文

VerticaはAUTO_INCREMENTを設定すると、内部的にシーケンスが作成されます。AUTO INCREMENTの番号は作成されたシーケンスで管理されており、ALTER SEQUENCE文で払い出し番号をリスタートすることにより、リセットすることができます。

構文

ALTER SEQUENCE <シーケンス名> RESTART WITH <値>;

パラメータ

項目説明
シーケンス名該当のシーケンス名を指定
採番時の開始番号
例:「1、2、3・・」と採番したい場合は「1」を指定


注意事項

接続中のセッションでデータ投入した場合は、番号はリセットされません。新しく接続したセッションから、リセットされて採番されます。

実行例

以下の例では、t1テーブルのID列の番号をリセットしています。

//0. 事前準備(t1テーブルの作成およびデータ投入)
dbadmin=> create table t1(ID AUTO_INCREMENT,col1 int,col2 varchar(10));
CREATE TABLE

dbadmin=> insert into t1(col1,col2) values(10,'hoge1');
 OUTPUT
--------
      1
(1 row)

dbadmin=> insert into t1(col1,col2) values(20,'hoge2');
 OUTPUT
--------
      1
(1 row)

dbadmin=> insert into t1(col1,col2) values(30,'hoge3');
 OUTPUT
--------
      1
(1 row)

dbadmin=> commit;
COMMIT

dbadmin=> select * from t1 order by ID;
 ID | col1 | col2
----+------+-------
  1 |   10 | hoge1
  2 |   20 | hoge2
  3 |   30 | hoge3
(3 rows)

//1. 対象テーブルのAUTO INCREMENT用シーケンスを確認する
dbadmin=> select identity_table_name,sequence_name,owner_name from sequences
     where identity_table_name='t1';
 identity_table_name | sequence_name | owner_name
---------------------+---------------+------------
 t1                  | t1_ID_seq     | dbadmin
(1 row)

//2. テーブルデータをtruncateする
dbadmin=> truncate table t1;
TRUNCATE TABLE

//3. データを投入する
dbadmin=> insert into t1(col1,col2) values(40,'hoge4');
 OUTPUT
--------
      1
(1 row)

dbadmin=> insert into t1(col1,col2) values(50,'hoge5');
 OUTPUT
--------
     1
(1 row)

dbadmin=> commit;
COMMIT

dbadmin=> select * from t1 order by ID;
 ID | col1 | col2
----+------+-------
  4 |   40 | hoge4    //★AUTO_INCREMENTのID列は3→4になっている
  5 |   50 | hoge5
(2 rows)

//4. テーブルデータをtruncateする
dbadmin=> truncate table t1;
TRUNCATE TABLE

//5. ALTER SEQUENCE RESTART文でAUTO_INCREMENT用のシーケンスをリスタートする
dbadmin=> ALTER SEQUENCE t1_ID_seq RESTART WITH 1 ;
ALTER SEQUENCE

//6. 新しいセッションでデータを投入する
dbadmin=> insert into t1(col1,col2) values(60,'hoge6');
 OUTPUT
--------
      1
(1 row)

dbadmin=> insert into t1(col1,col2) values(70,'hoge7');
 OUTPUT
--------
     1
(1 row)

dbadmin=> commit;
COMMIT

dbadmin=> select * from t1 order by ID;
 ID | col1 | col2
----+------+-------
  1 |   60 | hoge6    //★AUTO_INCREMENTの番号がリセットされ、ID列が1からはじまっている
  2 |   70 | hoge7
(2 rows)

検証バージョンについて

この記事の内容はVertica 9.2で確認しています。

更新履歴

2019/04/11 検証バージョンを9.2に変更
2017/04/27 本記事を公開