PostgreSQLにテキストデータ(CSVやTSVファイル)を格納する
PostgreSQLはCSVや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以下の文字を変えることで、他の形式にも対応できるので、変な区切り文字でも大丈夫。