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($2)) { $val = $2; } else { $val = $1; $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