20121227

[perl]PostgreSQLへファイルをCOPY FROMする

はまったので。

普通に



したら、ファイル読み込みエラー発生。

標準入力 STDINで回避。

#---以下参考

use DBI;
use DBD::Pg;

#DBへ接続
my $dbh = DBI->connect("dbi:Pg:dbname=【データベース名】;host=【ホスト名またはIPアドレス】","【ユーザ名】","【パスワード】") or die 'ERROR';
#>パスワードがなければ省略可

#COPY SQLを実行
my $Fg = $dbh->do("copy 【テーブル名】(【項目1】,【項目2】) from STDIN using delimiters ','");
#>項目は、ファイル内容に合わせて設定する
#>using delimitersは、ファイルのデータ型に合わせて設定する
#>using delimitersを省略した場合、タブ区切りのデータが初期値で設定されている

#COPY SQL実行 成功判断
if ( $? != 0 ){
#失敗
die 'ERROR';
} else {
#成功
#インポートするファイルを読込む
open(fh ,">","【ファイルパス・名】");

while(){
#念のため
chomp($_);
#一行づつ標準入力
$dbh->func( $_."n",'putline' );
#>putlineはDBDがインストールされていない場合利用できない
}

#終了行を出力(決まりごと)
$dbh->func( "\\.\n",'putline' );

#COPY終了
$dbh->func( 'endcopy' );

#ファイルを閉じる
close(fh);

}
#DBへの接続を切断
$dbh->disconnect;

[perl]DBI,DBDモジュールインストール確認コマンド(Linux)

perl -MDBD::Pg -e ''
perl -MDBI -e ''