かなめのロジック

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

PostgreSQLでファイルからのデータ取込

time 2018/02/11

PostgreSQLでファイルからのデータ取込

本記事では、PostgreSQLにおいてファイルからDBのテーブルにデータを取り込む方法について、まとめました。

ファイルデータの取込は、他システムとの連携等でよく使われます。

sponsored link

メタコマンド¥copy

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

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

使用方法

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

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

取込項目を指定する
テーブルの一部の項目を指定してデータ取込することも可能です。
項目を指定する場合は、テーブル名の個所をテーブル名(項目名,項目名,…)と記述します。

タブ区切りのファイルからデータを取り込む
区切り文字を変更することも可能です。
区切り文字を変更には、delimiter ‘x’(任意の1バイト文字)のオプションをつけます。
タブ区切りにするには、delimiter E’¥t’とします。

ヘッダーつきのファイルからデータを取り込む
ヘッダーつきのファイルからデータを取り込むことも可能です。
headerのオプションをつけることで1行目の行を無視して取り込みます。

COPYコマンド

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

使用方法

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

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

1点目は、データベースのスーパーユーザのみコマンドの実行が可能という点です。
2点目は、サーバーの環境のファイルを取り込むという点です。クライアントから接続している場合でも、サーバー環境のファイルから取込を行います。(パスもサーバーのパスを記述する、絶対パス指定必須)

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

関連

sponsored link

管理人

かなめ

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

管理人twitter

ブログ村



sponsored link