CSVファイルをPostgreSQLにインポートする方法です。 2つのやり方を紹介します。
ローカル環境にテスト用のCSVファイルが必要です。 あらかじめ作成しておきます。
Postgresの、DBサーバはDockerコンテナで作成します。
cat products.csv
id,name,price
1,cake,500
2,juice,300
3,cookie,100
file --mime products.csv
products.csv: text/plain; charset=us-ascii
docker run \
--name my-postgres \
-e POSTGRES_PASSWORD=secret \
-p 5432:5432 \
-d postgres
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72c628ab5d8f postgres "docker-entrypoint.s…" About a minute ago Up About a minute 5432/tcp some-postgres
\copy
コマンドはCSVファイルがホストマシンにある場合にリモートのDBサーバーに対して実行できます。
psql -h localhost -p 5432 -U postgres -d postgres
postgres=# create table products (id int, name varchar(255), price int);
postgres=# \copy products from ~/Desktop/products.csv with csv header encoding 'UTF8'
COPY 3
postgres=# select * from products;
id | name | price
----+--------+-------
1 | cake | 500
2 | juice | 300
3 | cookie | 100
(3 rows)
postgres=# drop table products;
COPYコマンドは、DBサーバーにファイルが存在する場合に利用できるコマンドです。
ホストマシンから、dockerコンテナにcp
コマンドでcsvファイルをアップロードし、試してみました。
docker cp products.csv my-postgres:/tmp/products.csv
docker exec my-postgres cat /tmp/products.csv
id,name,price
1,cake,500
2,juice,300
3,cookie,100
psql -h localhost -p 5432 -U postgres -d postgres
postgres=# COPY products FROM '/tmp/products.csv' with csv header encoding 'UTF8';
COPY 3
postgres=# select * from products;
id | name | price
----+--------+-------
1 | cake | 500
2 | juice | 300
3 | cookie | 100
(3 rows)