PostgreSQLでCSVデータのインポートについてささっと。
##事前準備(テーブル作成まで)
まずはDBを作成
名前は適当にcustomer。作ったらDB内へ入る
sf213471118:~ sf213471118$ createdb customer
sf213471118:~ sf213471118$ psql customer
psql (11.4)
Type "help" for help.
customer=#
以下の感じでcustomerテーブルを作っていく
####[テーブル]
id | name | gender | age |
---|---|---|---|
10001 | 田中太郎 | m | 31 |
10002 | 中村花子 | w | 44 |
10003 | 佐藤一郎 | m | 20 |
10004 | 内田彩 | w | 18 |
10005 | 高橋次郎 | m | 56 |
10006 | 中里悟 | m | 34 |
####[詳細]
カラム | 詳細 |
---|---|
id | 5桁の数字 |
name | 桁数指定なしの文字 |
gender | 男 --> m 女 --> w |
age | 桁数指定なしの数字 |
今回はDBをUTF-8で作成してあるので
customer=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+---------+-------+-----------------------
customer | sf213471118 | UTF8 | C | C |
日本語を使用する今回は1文字3バイトをしっかり考慮する必要がある。
では早速テーブル作成
customer=# CREATE TABLE customer
(id char(15) NOT NULL,
name varchar NOT NULL,
gender char(3) NOT NULL,
age INTEGER ,
PRIMARY KEY (id));
CREATE TABLE
##csvファイルをテーブルに全てをインポート
csvファイルを読み込む際はpsql内の\copy
コマンドを使用する。
後ろについているwith csv
がcsvファイルをコピーする命令となっている。
# \copy <Table name> from <File name/pass> with csv
このwith csv
がないとただのtxtになるので注意。
今回はあらかじめcustomer.csvを作成しておいたので、早速インポート。
customer=# \copy customer from 'Documents/customer.csv' with csv
COPY 6
確認して格納されていることを確認。
customer=# SELECT * FROM customer;
id | name | gender | age
-----------------+----------+--------+-----
10001 | 田中太郎 | m | 31
10002 | 中村花子 | w | 44
10003 | 佐藤一郎 | m | 20
10004 | 内田彩 | w | 18
10005 | 高橋次郎 | m | 56
10006 | 中里悟 | m | 34
(6 rows)
今回はヘッダー無しのパターンだったが、ヘッダーありのパターンの場合はcopy
コマンドのoptionが若干異なる。
# \copy <Table name> from <File name/pass> with csv header
とheader
optionをつけることでインポートが可能になる。
##csvファイルの指定カラムのみをテーブルにインポート
指定カラムのみをインポートしたい場合にはテーブル名の後ろにカラムを指定すればOK
# \copy <Table name>(column1,column2, ... ) from <File name/pass> with csv
先ほどの例をベースにしてid
,name
のみを指定して取り出すと
customer=# \copy customer(id,name) from 'Documents/customer.csv' with csv
となる。