PostgreSQLのテーブルデータをファイルへコピーする方法UNIX処方箋

現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、PostgreSQLのテーブルデータをファイルへコピーする方法を紹介する。

» 2007年12月25日 05時11分 公開
[ITmedia]

Solaris 8上でPostgreSQL 7.4.1を使用しています。最近、PostgreSQLのデータベーステーブルにあるデータを、CSV形式のファイルへ保存する必要が出てきました。PostgreSQLの対話的ターミナルpsqlでは、データをCSV形式のファイルへ保存できますか?


 PostgreSQLには、データベーステーブルとファイル間でデータコピーを行うものとして、copyインタフェースが用意されています。ここでは、psql経由でcopyインタフェースを使用する方法を紹介します。

 テスト用として用意した環境は、PostgreSQLのデータベースtestdb上にusersテーブルを作成し、3つのフィールド(社員番号、氏名、電話番号)がそれぞれ6行存在しているテーブルデータです(表1)

社員番号 氏名 電話番号
1 山田太郎 09012340000
2 山田次郎 09012340001
3 山田三郎 0901234001x
4 山田花子 0901234002x
5 高橋太郎 0901234003x
6 佐藤花子 0901234004x
表1 testdbデータベース上のusersテーブルの情報

データベースへの接続

 まずは、psqlでtestdbデータベースへ接続します。データベースへの接続は、データベース名を引数として指定するだけです。

psql <データベース名>


 データベースtestdbの場合、実行例1のように実行します。正常にデータベースに接続できていれば、データベース名(ここではtestdb)のプロンプトが表示されるはずです。


% psql testdb
Welcome to psql 7.4.1, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms        \h for help with SQL commands        \? for help on internal slash commands        \g or terminate with semicolon to execute query        \q to quit
testdb=# ■

実行例1 testdbへの接続

copyインタフェースの利用

 ファイルへの保存は、copyインタフェースを利用します。書式は以下のとおりです。

copy <コピー元テーブル名> to <コピー先ファイル名>;


 例えば、usersテーブルを/tmp/users.csvファイルへコピーする場合は、


testdb=# copy users to '/tmp/users.csv';
COPY

と実行し、正常に終了すると「COPY」という戻り値が表示されます。UNIXコマンドのcatなどを使用して、ファイルの内容を確認するとよいでしょう。


% cat /tmp/users.csv
1 山田太郎09012340000
2 山田次郎09012340001
        :
        :

 ただし、デフォルトの区切り文字はTabです。これを変更したい場合は、次のような書式で指定してください。

copy <コピー元テーブル名> to <コピー先ファイル名> with DELIMITER as <区切り文字>;


 従って、区切り文字を「,」にしてusersテーブルを/tmp/users.csvにコピーする際は、次のように実行します。


testdb=# copy users to '/tmp/users.csv' with DELIMITER as ',';
COPY

 catコマンドなどでファイルの内容を確認すると、


% cat /tmp/users.csv
1,山田太郎,09012340000
2,山田次郎,09012340001
        :
        :

のように、区切り文字が変更されたはずです。

 なお、PostgreSQLのcopyインタフェースでは、テーブル単位でデータをコピーできますが、VIEWのように実テーブルでないものはコピーできないので注意してください。

関連キーワード

データベース | PostgreSQL | Solaris | UNIX処方箋


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ