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


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

\ 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
2025.04.16

PostgreSQLの拡張機能「system_stats」のご紹介

EDB社が提供するPostgreSQLの拡張機能「system_stats」はPostgreSQL ユーザーがパフォーマンス問題に取り組む際の非常に強力なツールになります。SQLクエリでOS情報を取得できるため、DBエンジニアにとってはパフォーマンスの監視が格段に簡単になります。テストした結果をご紹介します。

  • EDB
  • PostgreSQL
2025.03.10

意外な落とし穴!アプリケーション⇒DBデータ型によるパフォーマンス影響

PostgreSQLのオプティマイザがインデックスを適切に使用できない理由は様々ですが、本記事ではJDBC⇔PostgreSQL間でデータ型の不一致がインデックスの使用にどういった悪影響を及ぼすかを見ていきます

  • EDB
  • PostgreSQL
2024.09.12

新ツール Postgres Workload Report によるパフォーマンス診断~データベース管理の未来を共に創る!~

EDB Postgres Workload Reportsは、Postgresデータベースのパフォーマンス診断とトラブルシューティングを強化する新しいツールです。OracleのAWRに似た詳細なレポートを提供し、データベースの問題を迅速に特定・解決できるようサポートします。本記事では概要と利用手順をご紹介します。

ページの先頭へ戻る