PostgreSQLにテキストデータ(CSVやTSVファイル)を格納する

PostgreSQLCSVやTSVなどのテキストファイルを読み込んで、テーブル上に格納することができます。ここで使うのはPostgreSQLのCOPYコマンドです。

事前準備

取り込むもとになるテキストデータが存在する場所のアクセス権設定しだいでエラーが出る場合があります。 雑なやり方ですが、Windows環境の場合ではProgram Files¥PostgreSQL以下にデータインポート用のフォルダをつくってしまい、ユーザ名postgresにアクセス権を全付与してやると良いです。

やり方が環境に依存しますので(Win7の場合はPostgresにアクセス権付与した気がするし、Win8はデフォルトUserにアクセス権付与でOKなような気が)、一律にやり方を書きだせません。なんかエラーが出たらコメントで教えてもらえると助かります。

ファイルを格納する前にデータを取り込むDB&テーブルを作成しておきます。当然ですが、投入するテキストデータのデータ形式に合わせないといけません。

CREATE TABLE 'UserList' (
'UserId' integer,
'UserName' text
)

数値のデータを入れるカラムは数値型(intとか)。文字列を入れるのなら文字列型(textやvar charとか)を指定しましょう。

DBの作成方法は省略していますが、pgAdminでサーバを右クリックして「新規DB作成」ですぐに作成できます。

今回入力するテキストデータはユーザID(UserId)、ユーザ名(UserName)の二種類が入ってると仮定しています。テーブル名はUserList。PostgreSQKのCREATE TABLEを使ってテーブルを作成しました。pgAdminでSQLエディタを起動してから、上述のクエリを流し込むとテーブルができると思います。

TSVファイルの格納

Postgresのデフォルトはタブ区切り(TSV)なので、まずタブ区切りのファイルを読み込ませる方法から。PostgreSQLの配下にImportという名前のフォルダを作ってアクセス権を付与したとして、ファイルUserList01.tsvを読み込むためには

COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList01.tsv';

こんな感じでSQLを書きます。複数ファイルがあっても大丈夫。

COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList01.tsv';
COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList02.tsv';
COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList03.tsv';

下の書き方をするとデータがテーブルに追加されていきます。いわゆる追加(Append)のような挙動です。

CSVファイルの格納

CSVファイルの場合は引数をつける必要があります。

COPY 'UserList' FROM 'C¥Program Files¥PostgreSQL¥Import¥UserList01.tsv' USING DELIMITER '.';

USING DELIMITER以下の文字を変えることで、他の形式にも対応できるので、変な区切り文字でも大丈夫。


スポンサード リンク