はじめに
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 本記事を公開