結論
-
psql database_name
でログインしない -
psql
コマンドの-c
オプション使ってSQLコマンドを実行 -
stdin
と<
を使ってcsvデータを標準出力する - カラム名は書く
-
COPY
にする(\
は付けない)
$ psql table_name -h host_name -c "COPY shop_sales (shop_id,sales_date,shop_name) from stdin with csv DELIMITER ','" < /home/user/hoge.csv
当初の想定
-
psql database_name
でログインして\copy
コマンドを実行 - ファイルはEC2に置いて、そのファイルパスを絶対パスで記述(/home/user_name/hoge.csv)
色々試してみたコマンド集(全部エラー)
=# \copy shop_sales (shop_id,sales_date,shop_name) from ‘/home/user/hoge.csv' with csv;
=# \copy shop_sales (shop_id,sales_date,shop_name) from ‘/home/user/hoge.csv' with DELIMITER ',';
=# \copy shop_sales from ‘/home/user/hoge.csv' with DELIMITER ',';
$ psql table_name -h host_name -c "\copy shop_sales from ‘/home/user/hoge.csv' with csv DELIMITER ','";
# csvの形式とテーブルの形式が合ってない エラー
$ psql table_name -h host_name -c "COPY shop_sales from stdin with csv DELIMITER ','" < /home/user/hoge.csv
awsのドキュメントにも\copy
コマンドを使う例が書いてあるのだけど、\copy
使えば出来そうなんだけど...
http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#PostgreSQL.Procedural.Importing.Copy
まとめ
アプリが何か制御してたりするのかな...
デフォルトでどういう動きになるのかやってみたいなー
参考にさせて頂いたサイト
https://teratail.com/questions/49888