PostgreSQLスキルアップノート(自己啓発のための個人サイト)
pg_bulkloadの実用的な実施例
【一覧に戻る】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ pg_bulkloadの簡単な例
■■■■
■■■■
■■■■ 2012/07
■■■■ 使用環境:PostgreSQL9.1.4 (CentOS6.2)
(C) 2012 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★このページはそのままカット&ペーストで実行して試すことができます。
【pg_bulkloadバージョン】
Release Name: 3.1.1
Notes: Release for PostgreSQL9.1
【公式サイト】
pgFoundry→●[公式サイト]
【参考記事】
pg_bulkload ホームページ→●[記事]
■1■ 今回の条件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
・入力ファイル テーブル名.txt
・入力ファイルの形式 csvファイル(カンマ区切り、文字列ダブルクォート囲み)
・ログファイル テーブル名.log
・制御ファイル load_comma_double.ctl
■2■ テスト用テーブル作成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【□】 定義の作成
drop table if exists tbl01;
create table tbl01(c1 numeric(10),c2 timestamp,c3 varchar(10),c4_biko text);
【□】 データの作成
vi tbl01.txt
------------------------
0001,2012-07-01 23:59:59,"aaaaaaaaaa","基本形"
,2012-07-02 12:30:59,"bbbbbbbbbb","数字がNULL"
0003,2012-07-02 12:30:59,,"文字c3がNULL"
0004,2012-07-02 12:30:59,"","文字c3が空文字"
0005,,"bbbbbbbbbb","日付がNULL"
0006,,"aa\"bb","エスケープ文字L"
-------------------------
【□】 cat -T load1.txt
■3■ ロード用制御ファイル作成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【□】 vi load_comma_double.ctl
--------------------
# TRUNCATE = YES
TYPE = CSV
DELIMITER = ","
QUOTE = "\""
ESCAPE = \
--------------------
■4■ ロードの実行
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
シェルスクリプトなどにそのまま組み込めるように、シェル変数にテーブル名
をセットしてから実行。
【□】
TBNM=tbl01
pg_bulkload load_comma_double.ctl -i $TBNM.txt -O $TBNM -l $TBNM.log
unset TBNM
■5■ 確認
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【□】 select * from tbl01;
出力結果例
postgres=# select * from tbl01;
c1 | c2 | c3 | c4_biko
----+---------------------+------------+-----------------------------
1 | 2012-07-01 23:59:59 | aaaaaaaaaa | 基本形
| 2012-07-02 12:30:59 | bbbbbbbbbb | 数字がNULL
3 | 2012-07-02 12:30:59 | | 文字c3がNULL
4 | 2012-07-02 12:30:59 | | 文字c3が空文字
5 | | bbbbbbbbbb | 日付がNULL
6 | | aa"bb | エスケープ文字により"を格納
(6 rows)
以上