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


\ EDBとは?について知りたい方はこちらへ! /



執筆者情報

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

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


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

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • EDB
  • PostgreSQL
2024.01.16

EDBがもたらすデータベースの新たな価値 ~ EDB社Field CTO Ajit Gadge氏来日、セミナー講演レポート ~

EDB社のAjit Gadge氏を招き「PostgreSQLユーザーに捧ぐ、EDBを使ったDB機能向上とコスト削減の両立」セミナーを開催しました。DB市場の現状やトレンド、EDBの最新動向について紹介しております。アシストセッションのアーカイブ配信の視聴申し込みも可能です。ぜひご覧ください。

  • PostgreSQL
  • EDB
2023.12.20

PostgreSQLのSQLチューニングを体験してみよう!

35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載最終回となる9回目の記事では、「PostgreSQL SQLチューニング実践」のワークショップ主管である 田中 健一朗 にインタビューしました。

  • PostgreSQL
  • EDB
2023.10.30

データベースの健康診断! ~ PostgreSQL DB稼働分析体験 ~

35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載8回目となる今回の記事では、PostgreSQL DB稼働分析ワークショップの主管である保田 公貴にインタービューしました。

ページの先頭へ戻る