読者です 読者をやめる 読者になる 読者になる

PostgreSQLにテキストデータを格納する

表題どおり。PostgreSQLCSVやTSVなどのテキストファイルを読み込んで、RDB上に格納することができる。やり方はPostgresのCOPYコマンドを使う。

事前準備

このやり方でPostgreSQL上にデータを格納する場合、テキストファイルをPostgresが読み出しに行くのだけど、アクセス制限がかかってて読み出せないことがある。 Windows環境の場合だと、Program Files¥PostgreSQL以下にデータインポート用のフォルダをつくって、PostgreSQLのフォルダでアクセス権を全付与してやると良い、と思う。

やり方が環境に依存する(Win7の場合はPostgresにアクセス権付与した気がするし、Win8はデフォルトUserにアクセス権付与でOKなような…)ため、一律にやり方を書き下せない。適当なことを言ってる可能性が高いので、その辺織り込んでください。

ファイルを格納する前に、容れ物となるDB・テーブルを作成しておく。当然ながら入れるテキストデータのカラムに合わせないとだめ。

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

DBの作成方法は省略している。pgAdminなんかで新規DB作成すればすぐにできる。

今回入力するテキストデータはユーザID(UserId)、ユーザ名(UserName)の二種類が入ってるとした。テーブル名はUserList。PostgresのCREATE TABLEを使ってテーブルを作成している。

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';

CSVファイルの格納

CSVファイルの場合は引数をつける。

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

USING DELIMITER以下の文字を変えることで、他の形式にも対応できるかも。