pg_bulkload インストールして使ってみた
http://pgbulkload.projects.postgresql.org/index_ja.html
# wget http://pgfoundry.org/frs/download.php/3101/pg_bulkload-3.0.2-1.pg90.rhel5.x86_64.rpm # rpm -ivh pg_bulkload-3.0.2-1.pg90.rhel5.x86_64.rpm # データベースのオーナユーザで実行 $ psql -f /usr/pgsql-9.0/share/contrib/pg_bulkload.sql データベース名 SET BEGIN CREATE FUNCTION COMMIT
設定ファイル例
オンラインマニュアルのサンプル(sample_csv.ctl)は INPUT と OUTPUT の書き方が違っているのでサンプルのままだと動きません...
ERROR: query failed: ERROR: invalid keyword "INPUT"
とか
ERROR: query failed: ERROR: invalid keyword "OUTPUT"
ってなります
$ vi hoge.ctl TYPE = CSV INFILE = /tmp/201109.txt # INPUT じゃなくって INFILE TABLE = details # OUTPU じゃなくって OUTFILE QUOTE = "\"" ESCAPE = \ DELIMITER = " " LOGFILE = /tmp/pg_bulkload.log PARSE_BADFILE = /tmp/PARSE_BADFILE.txt DUPLICATE_BADFILE = /tmp/DUPLICATE_BADFILE.txt PARSE_ERRORS = -1 DUPLICATE_ERRORS = -1 ON_DUPLICATE_KEEP = OLD
実行
$ /usr/pgsql-9.0/bin/pg_bulkload ./hoge.ctl NOTICE: BULK LOAD START NOTICE: BULK LOAD END 0 Rows skipped. 2073627 Rows successfully loaded. 104 Rows not loaded due to parse errors. 0 Rows not loaded due to duplicate errors. 0 Rows replaced with new rows. WARNING: some rows were not loaded due to errors
この例ではデータのパースエラーで104取り込まれませんでした。
エラーになった列は 設定ファイルでしてした
PARSE_BADFILE = /tmp/PARSE_BADFILE.txt
に記録されています。
COPY文だと1行エラーになると全部キャンセルされちゃうけど
pg_bulkload は正常なものだけでも取り込んでくれるので助かります。