Database Support Blog

  • EDB
  • PostgreSQL
2022.02.17

PostgreSQLでCSVファイルをインポート/エクスポートする方法

当記事はエンタープライズDB社のブログ記事の翻訳の紹介および弊社考察を加えています。


この記事では、CSVファイルからPostgreSQLにデータをインポートする方法とPostgreSQLからCSVファイルにデータをエクスポートする方法について説明します。また、CSVファイル形式の紹介とその使用例も含みます。

 1. CSVファイルの作成
 2. テーブルの作成
 3. psqlからCSVファイルをインポート
 4. シェルプロンプトからCSVファイルをインポート
 5. CSVファイルへデータをエクスポート

CSVファイルは、各データがカンマ(,)で区切られた一般的なデータフォーマットです。多くのアプリケーションがCSV形式でデータを出力しており、監視データを収集するために使用される単純なシェルスクリプトから、複雑なWebフォームのデータ送信/受信まで幅広い場面で使われています。また、データベースサーバから別のサーバーにデータを移動したり、単に新しいハードウェアにデータを移動する場合等、「データダンプ」の機能としてCSVファイルを使用することもできます。

ここでは、CSVファイルをPostgreSQLデータベースにインポートするために必要な手順を説明します。データベースにログインしている状態でpsqlプロンプトからCSVファイルを呼び出す方法と、シェルプロンプトから呼び出す方法を説明します。


CSVファイルを作成する

まずはCSVファイルを作成します。既存のCSVファイルがあればそちらを使っていただいても構いません。既存のファイルが無い場合は次のような基本的な構成のCSVファイルを作ってください。

 
 都道府県,市町村,郵便番号
 東京都,千代田区, 1020072
 大阪府,大阪市,5350005
 京都府,京都市,6168171
 福岡県,福岡市,8140004
 北海道,札幌市,0040021
 

このデータをコピーして、任意のテキストエディタを使ってテキストファイルに保存し、「japan.csv」という名前で保存してみましょう。


テーブルを作成する

CSVのデータを、データベース内の適切な場所に格納するため、まずはデータベースにテーブルを作成する必要があります。

 
 postgres=# CREATE TABLE japan
 (都道府県  varchar, 
  市町村    varchar, 
  郵便番号  numeric(7));
  
 CREATE TABLE
 postgres=# 
 

psqlプロンプトからインポートする

作成したCSVファイルをデータベースのテーブルにインポートしてみましょう。

COPYコマンドを使用してCSVファイルからテーブル "japan" に全てのレコードをコピーすることにします。 COPYコマンドの例は次の通りです。

 
 \COPYtable name> FROM 'location + file_name' DELIMITER ',' CSV HEADER;
 

コマンドを理解するために各項目について細かく見ていきます。

項目 詳細
/COPY これはCSVファイルからレコードをコピーするコマンドです
<table name> データをインポートするテーブル名を指定します
FROM ファイルからインポートすることを指定します。(ファイルにエクスポートする場合は “TO” を使います。)
‘location + file_name’ ファイルへの絶対パス(ファイルへの読み取り権限があることをご確認ください)
DELIMITER ',' データの区切り文字(デリミタ)を指定します。この例ではカンマです。
CSV インポート元のファイル形式を指定します。
HEADER CSVファイルにヘッダー行があることを示し、インポート時に最初の1行を無視します。(エクスポート時には、ヘッダーファイルをエクスポートするか除外するかを指定できます)。

コマンドに必要な情報を設定すると次のようになります(データベースにログインし、テーブルを作成したデータベースに接続していることをご確認下さい)。

 
 postgres=# \copy japan from '/Users/EDB1/Downloads/japan.csv' delimiter ',' csv header;
 COPY 4
 

シェルプロンプトからインポートする

次はシェルプロンプトからCOPYコマンドでインポートする方法をご紹介します。

 
 ./psql -d postgres -U postgres -c "\copy japan from /Users/EDB1/Downloads/japan.csv delimiter ',' csv header;"
 
 Password for user postgres: 
 
 COPY 4
 

このコマンドはpsqlプロンプトからインポートした時と同じ構文ですが、シェルとして実行できるため、データをインポートしようとした時に、インポート処理をスクリプト化したり、スケジュールされたジョブを作成したりする時に役立ちます。


CSVファイルにデータをエクスポートする

ここまでの内容でCOPYコマンドとその実行パラメータについてはご理解いただけたと思います。インポートと同様に、COPYコマンドを使うことでテーブルの内容をファイルにエクスポートすることもできます。”FROM” を “TO” に置き換えることで、単純にインポートの逆の処理を行うことができます。

 
 \COPY <table name> TO 'location + file_name' DELIMITER ',' CSV HEADER;
 

同じテーブルを例に、データをCSVファイルにエクスポートしてみます。

psqlプロンプトから実行する場合、次のコマンドでエクスポートができます。

 
 \copy japan TO /Users/EDB1/Downloads/amit.csv DELIMITER ',' CSV HEADER;"
 
 COPY 4
 

シェルプロンプトから実行する場合、コマンドは次のようになります。

 
 ./psql -d postgres -U postgres -c "\copy japan to /Users/EDB1/Downloads/amit.csv delimiter ',' csv header;"
  
 Password for user postgres: 
 
 COPY 4
 

(以上、EDB社ブログ記事より翻訳)


まとめ

CSVファイルをPostgreSQLで扱う(インポート、エクスポート)方法をご紹介いたしました。アプリケーション間の互換性が高いCSVファイルを扱う機会は多いと思いますので、CSVファイルをPostgreSQLに取り込む機会に本記事が参考になりましたら幸いです。

なお、EDBにはOracleデータベースと互換性のあるインタフェースを提供する高性能バルク・ローダーであるEDB*Loaderがあります。EDB*Loaderは以下のブログ記事で紹介していますので、興味をお持ちの方は併せて参照ください。

SQL*Loader互換のEDB*Loaderを使ってみよう
https://www.ashisuto.co.jp/db_blog/article/201707_edb_loader.html


執筆者情報

やすだこうき プロフィール画像

ビジネスインフラ技術本部 データベース技術統括部

2017年に中途入社。Oracle Database、EDB Postgres/PostgreSQL のサポート経験を経て、2020年からバックサポートを担当。DBとアプリケーションを繋ぐミドルウェア製品のスペシャリスト。トレンドな技術は積極的に触れるほど好奇心旺盛。最近はプロアクティブなサポートを目指して粉骨砕身。趣味はボードゲーム。


■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
 文中の社名、商品名等は各社の商標または登録商標である場合があります。


Oracle Databaseライセンスのご相談ならアシスト

関連している記事

  • PostgreSQL
  • EDB
2022.05.25

アシストがPostgreSQLグローバル開発グループのSponsor一覧に掲載されたので、中の人に話を聞いてみた!(前編)

アシストは2009年からPostgreSQLのプロダクトサポートを開始、2010年に日本PostgreSQLユーザー会への協賛会員として参画、2012年にPostgreSQL エンタープライズ・コンソーシアムに参画しています。現在JPUGで活躍する田中・喜田の両名がどのような活動をしているのか2回にわたってお届けします。

  • Oracle Database
  • Oracle Cloud
  • PostgreSQL
  • AWS
  • Exadata
2022.05.24

入社2年目がレポート!Cloud Database Days 2022技術セッションの見どころ

2022年5月26日~6月3日に開催される「Cloud Database Days 2022」。その中でも10個に分かれた技術セッションについて、ポイントを押さえてそれぞれご紹介いたします!

  • EDB
  • PostgreSQL
  • AWS
2022.04.13

クラウドへのデータベース移行を検討中の方必見!「EDB」とは?

2022年4月22日(金)に開催する「アシスト流 EDB活用術 on AWS」の内容をチラ見せ。「EDBって何?」という方から「EDBは知ってるけどクラウド上でもEDB??」という方まで、ぜひお申し込みください。

ページの先頭へ戻る