試行錯誤ダイアリー

新卒エンジニアが日々の技術的な学び,働き方,日々感じたこと等を書きます

【AWS RDS(Postgres)】手元のデータ(csv/tsv)をRDSにインポートする方法


手元にあるcsv/tsvデータなどをコマンドライン上でRDS(Postgres)にインポートする方法について説明します.

方法

まずRDS上にインポートしたいテーブルの列情報を入れたテーブル作成します.

そしてターミナルでこのコマンドを実行すればインポートできます.

PGPASSWORD=<Password> psql -h <Host> -p <Port> -d <Database> -U <UserName> -c "\copy schema.table_name from stdin DELIMITER E'\t' CSV;" < ./tsv_file.tsv

※<*>はパラメータで,schema.table_nameはインポート先のテーブル名,tsv_file.tsvはインポートしたいtsvファイルのパスを表します.

もしかしたらデータ形式パラメータのCSVは必要ないかもしれません.

csvファイルをインポートしたい場合はDELIMITER E','としてください.

引用符はQUOTE E'\"'で対応出来たはずです.

その他コマンドはこのあたりを参照してみてください.
PostgreSQL ドキュメント

経緯とまとめ

今回はRedshiftからRDSにデータを移行したいときに,Redshiftからs3にデータをアンロードして,それをRDS(Postgres)に入れたときの話です.
(RedshiftからRDSへデータを移行する場合はs3を一度介さなければいけないみたいです)

定期的な処理や,完全に移行したい場合などでは,Data PipelineやDMSなどを使った方が正しい方法だと思います.(Data Pipelineも結局中ではs3を通しているみたいですが)

1回や極低頻度での処理だったらこの方法でパッっとやっちゃってもいいのかなと思います.