postgresでデータを写すときにCSVに書き出して
それをCOPYするっていう方法がある。
select * into temporary aaa _temp from bb where send_date >'2010-01-01';
CSVファイルに書き出す
copy aaa _temp to '/home/postgres/test/mail.bup' CSV;
これを1回でする場合
copy (select * from bb) to '/home/postgres/test.csv' DELIMITER',';
流し込む側のDBに同じ構成のtableを作っておく
copy bb2 from '/home/postgres/flax/mail.bup' USING DELIMITERS ',';
で、これでうまくいったとおもいきや、
***ERROR: invalid input syntax for integer: ""
integerのカラムに空文字を入れるとエラーになるのでなんとかしなきゃいけないよな。。
なんとかなった!
WITH NULL AS '';
というのをつけるとnullは空文字で認識してくれるらしい。
そんでUSING DELIMITERS ',';ってのを使ってると、普通の文章の中の,までも認識されるから
これで流し込むとエラーになる。
CSVだってわからせればいいみたいなんで
WITH CSVとつければOK.
結局
WITH CSV NULL AS ''
をつければOKだった。
ここまでたどり着くのにかかった。。。('A`)
PR