本文 |
Excelカンマ区切り形式のCSVをPostgreSQLのpsqlコマンドから取り込みます。
# Excelカンマ区切り形式CSV in.csv を test_db の user_m テーブルの項目 user_id, user_name, new_stamp, new_client に取り込みます。
# 一行目は項目名が入っていると仮定します。
cat in.csv | perl -e '
print "begin;
set client_encoding to sjis;
copy user_m (user_id, user_name, new_stamp, new_client) from stdin;
";
$on = undef;
$line = "";
$i = 0;
while (<STDIN>) {
$line .= $_;
($on = ($on && m/(?<![^"]")"(,|\r?\n|$)/) ? undef
: ((!$on && m/((?:^|,)"(?:""|[^"])*(?<![^"]")(,|\r?\n|$))/) ? 1 : $on)) && next;
if ($i++ == 0) {
$line = "";
next;
}
$line =~ s/(\r\n|\r|\n)$//;
@cols = ();
while ($line =~ m/(?:^|,)(?:"((?:""|[^"])*)"|([^",]*))(?=,|)/mg) {
$val = "";
if (defined()) {
$val = ;
} else {
$val = ,;
$val =~ s/""/"/g;
}
$val =~ s/\r/\r/g;
$val =~ s/\n/\n/g;
$val =~ s/\t/\t/g;
push(@cols, $val);
}
$line = "";
print join("\t", @cols)."\n";
}
print "\.
commit;";
' | psql -U postgres -d test_db
|