ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

PostgreSQLに複数の外部ファイルを読み込ます方法

目次


外部ファイルを使ってレコードを一気に挿入

PostgreSQLをバージョンアップする方法がよくわかっていない。
データを移す方法がよくわからない。なので新バージョンをインストールするたびにレコードを挿入し直している。
バックアップ用のデータはinsert文をそのままSQLファイルにして保存してある。
外部ファイルを一つ一つ読み込ますのは面倒なので複数のファイルを一度に読み込ませている。

複数の外部ファイル

以下はresultデータベースのresultsテーブルに3年分のレース(レガッタ)結果を挿入する例。
次のような3つのファイルがあるとする。

2016result.sql

insert into results (year, rank, crew, time) values
(2016,1,'Crew1','08:08.06'),
(2016,2,'Crew2','08:11.24'),
(2016,3,'Crew3','08:14.41');


2017result.sql

insert into results (year, rank, crew, time) values
(2017,1,'Crew1','08:09.06'),
(2017,2,'Crew2','08:12.24'),
(2017,3,'Crew3','08:15.41');


2018result.sql

insert into results (year, rank, crew, time) values
(2018,1,'Crew1','08:10.06'),
(2018,2,'Crew2','08:13.24'),
(2018,3,'Crew3','08:16.41');


上記3つのファイルを一度に読み込ますためのファイルをつくる。

results2016_2018.sql

\i 2016result.sql
\i 2017result.sql
\i 2018result.sql


PostgreSQLに複数の外部ファイルを読み込ます手順

  • さきほどつくった4つのファイルを同じディレクトリに配置する
  • ターミナル/PowerShellでファイルを配置したディレクトリに移動する
  • PostgreSQLサーバを起動してresultデータベースに接続する
  • \iコマンドでresults2016_2018.sqlファイルを読み込ます


以下はmacOS10での例。データベースへの接続方法は各環境ごとのものとする。


サーバを起動する

$ pg_ctl -D /usr/local/var/postgres -l logfile start

-l logfileはログを記録したい場合にお好みで。


resultデータベースに接続する

$ psql result


外部ファイルを読み込ます

result=# \i results2016_2018.sql


これで9件のレコードを一度に挿入できる。

今回の環境

macOS10.14
Ruby 2.5.1p57
PostgreSQL 10.3