はじめに
Verticaは他のDBと同様にAUTO_INCREMENTを利用することで、データに一意の番号を振ることができます。洗替え処理をしているシステムでは、番号をリセットして、一から採番しなおしたい場合があるかと思います。
今回はその方法をご紹介します。
ALTER SEQUENCE構文
VerticaはAUTO_INCREMENTを設定すると、内部的にシーケンスが作成されます。AUTO INCREMENTの番号は作成されたシーケンスで管理されており、ALTER SEQUENCE文で払い出し番号をリスタートすることにより、リセットすることができます。構文
ALTER SEQUENCE <シーケンス名> RESTART WITH <値>;
パラメータ
項目 | 説明 |
---|---|
シーケンス名 | 該当のシーケンス名を指定 |
値 | 採番時の開始番号 例:「1、2、3・・」と採番したい場合は「1」を指定 |
注意事項
接続中のセッションでデータ投入した場合は、番号はリセットされません。新しく接続したセッションから、リセットされて採番されます。
実行例
以下の例では、t1テーブルのID列の番号をリセットしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
//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 本記事を公開
- 投稿タグ
- シーケンス, AUTO_INCREMENT, オートインクリメント, 連番, 採番, SEQUENCE, 番号