データロードで不正データがある場合にロールバックする方法
COPYコマンドでオプションを付けずにデータロードを行うと、不正データ(桁溢れなどのデータ)以外は、ロードが正常に実行されます。
※不正データは、Rejected Dataファイルに出力されます。
不正データがあった場合、ロード処理全体をロールバックするようにしたいときは、COPYコマンドに”ABORT ON ERROR”オプションをつけて実行してください。
例 : INT型のカラムに有効桁数以上の数値をロードした場合
▼ファイルの7レコード目に19桁以上の数値を設定
$ more test.csv
1
2
3
4
5
6
9999999999999999999999999
▼COPYコマンドを使用しDIRECTのみでロードすると不正データによるエラーは表示されず、不正データ以外はロードされます。
dbadmin=> copy test from '/home/dbadmin/test.csv' direct;
Rows Loaded
-------------
6
(1 row)
dbadmin=> select * from test;
a
---
1
2
3
4
5
6
(6 rows)
▼COPYコマンドに"ABORT ON ERROR"を付けることで、有効桁数を超える数値のロードで不正データによるエラーが発生しロードデータはロールバックされます。
dbadmin=> copy test from '/home/dbadmin/test.csv' abort on error direct;
ERROR 2035: COPY: Input record 7 has been rejected (int8 out of range '9999999999999999999999999' for column 1 (a))
dbadmin=> select * from test;
a
---
(0 rows)検証バージョンについて
この記事の内容はVertica 9.1で確認しています。