はじめに
COPYコマンドでロードに成功した件数とロードに失敗した件数は、関数を検索することで確認することができます。以下で関数を使用した確認方法をご紹介します。
関数
下記の関数でCOPYによるロードの結果を確認することがきます。[ロードに成功した件数を確認する関数]
get_num_accepted_rows
[ロードに失敗した件数を確認する関数]
get_num_rejected_rows
※COPYで”ABORT ON ERROR”を設定した場合は上記関数で件数を確認することができません。
※COPYを行ったセッションで関数を実行する必要があります。
使用例
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 |
■ロードするテーブルの確認をします。 dbadmin=> \d tbl1 List of Fields by Tables Schema | Table | Column | Type | Size | Default | Not Null | Primary Key | Foreign Key --------+-------+--------+------------+------+---------+----------+-------------+------------- public | tbl1 | col1 | int | 8 | | f | f | public | tbl1 | col2 | varchar(5) | 5 | | f | f | public | tbl1 | col3 | int | 8 | | f | f | ■ロードするCSVの確認をします。 cat tbl1.csv 1,ABC,111 2,ABCD,222 3,ABCDE,333 4,ABCDEF,444 <= COL2列にvarchar(5)を超える桁数の"ABCDEF"をロードする 5,ABCDEFG,555 <= COL2列にvarchar(5)を超える桁数の"ABCDEFG"をロードする ■COPYでデータロードを実行します。 ("REJECTED DATA"オプションで指定したファイルにロードで失敗したデータを出力します) dbadmin=> copy tbl1 from local './tbl1.csv' delimiter ',' ENFORCELENGTH REJECTED DATA '/tmp/tbl1_reject.csv' direct; Rows Loaded ------------- 3 ■テーブルを検索します。 dbadmin=> select * from tbl1; col1 | col2 | col3 ------+-------+------ 1 | ABC | 111 2 | ABCD | 222 3 | ABCDE | 333 ■COPYでロードに成功した件数を確認します。 dbadmin=> select get_num_accepted_rows(); get_num_accepted_rows ----------------------- 3 <= 3件のロードが成功したことを確認できます。 ■COPYでロードに失敗した件数を確認します。 dbadmin=> select get_num_rejected_rows(); get_num_rejected_rows ----------------------- 2 <= 2件のロードが失敗したことを確認できます。 ■COPYでロードに失敗したデータを確認します。 dbadmin=> \! cat /tmp/tbl1_reject.csv 4,ABCDEF,444 5,ABCDEFG,555 |