かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

PostgreSQLでファイル出力

time 2018/02/02

PostgreSQLでファイル出力

本記事では、PostgreSQLにおいてDBのデータからファイルを出力する方法について、まとめました。

ファイルの出力は、他システムとの連携等でよく使われます。

sponsored link

メタコマンド¥copy

psql内で入力されたコマンドのうち、バックスラッシュ(日本語入力環境だと一般的には円マーク)で始まるコマンドをpsqlのメタコマンドと呼びます。

そのうちの一つである¥copyを使うことで、ファイルへの出力を行うことができます。

使用方法

文法
¥copy テーブル名など to ‘パス&ファイル名’ with csv

説明
テーブルをcsv形式でファイルに出力します。クライアントの環境にファイル出力されます。
with csvとオプションをつけることで、csv形式にできます。省略するとテキスト形式になりますが、csv形式の方がオプション色々使えるので便利かと思います。
パスは、絶対パスか、psqlを起動した際のパスからの相対パスで指定します。

出力項目を指定する
テーブル全体を出力するだけでなく、項目を指定して出力することも可能です。
項目を指定する場合は、テーブル名の個所をテーブル名(項目名,項目名,…)と記述します。

クエリ結果を出力する
クエリ結果を出力することも可能です。
項目を指定する場合は、テーブル名の個所を(SELECT~)のようにクエリを記述します。注意点としては、カッコでくくる必要があります。

タブ区切りで出力する
区切り文字を変更することも可能です。
区切り文字を変更には、delimiter ‘x’(任意の1バイト文字)のオプションをつけます。
タブ区切りにするには、delimiter E’¥t’とします。

項目名のヘッダーつきで出力する
項目名をヘッダーとして出力することも可能です。
項目名をヘッダーとして出力には、headerのオプションをつけます。

注意点
ビューに対して使用することはできません。ただし、応用2のようにクエリを使用すれば可能です。

COPYコマンド

psqlでCOPYコマンドを使用することでも、ファイルとの出力を行うことができます。

使用方法

文法
COPY テーブル名など TO ‘パス&ファイル名’ WITH CSV;

説明
基本的には、¥copyと同じです。オプションも含めて同じように使うことができます。ただし、大きな違いが2点あります。

1点目は、データベースのスーパーユーザのみファイル出力が可能という点です。
2点目は、サーバーの環境にファイル出力されるという点です。クライアントから接続している場合でも、サーバー環境にファイル出力されます。(パスもサーバーのパスを記述する、絶対パス推奨)

上記の制限から、メタコマンドの¥copyの方が使いやすいと思います。しかし、COPYコマンドの方が早いという情報もあります。(近いうちに検証予定)

関連

sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link