概要
sqlplusではSQLファイルを指定してを実行する際、SQLファイル内に記載したSQLファイルを呼び出して実行することができる。
> sqlplus user/pass@sid @xxx.sql
xxx.sql
@a.sql
@b.sql
@c.sql
・
・
・
PostgreSQLでのDB構築を行うためにデータベースに複数のテーブルを一括作成する必要があり、
上記の対応をPostgreSQLでも実行できるか検証する。
<実行環境>
環境 | バージョン |
---|---|
CentOS | 7.6.1810 |
PostgreSQL | 9.2.24 |
検討内容
psqlコマンドでは/fオプションで実行するファイル名を指定できる。
またpsqlでのログイン後に\iオプションで実行するファイル名を指定できる。
この2つのオプションを利用してみる。
構成
/opt
/postgresql
├all.sql ←/fオプションで指定するSQLファイル
├allexecute.sh ←一括実行用シェル
├result.log ←一括実行結果
└tables
├table1.sql ←all.sqlから呼び出されるSQLファイル
└table2.sql ←同上
allexecute.sh
# !/bin/sh
echo `date '+%y/%m/%d %H:%M:%S'`
echo "一括SQLを実行します。"
# SQLを実行する
psql -U sandbox -h 127.0.0.1 -d db_sandbox -f ./all.sql > ./result.log
echo `date '+%y/%m/%d %H:%M:%S'`
echo "一括SQLの実行が終了しました。"
all.sql
\i /opt/postgresql/tables/table1.sql
\i /opt/postgresql/tables/table2.sql
table1.sql
DROP TABLE staff1;
CREATE TABLE staff1(
id integer, name character varying(10)
);
対応結果
result.log
DROP TABLE
CREATE TABLE
DROP TABLE
CREATE TABLE
まとめ
PostgreSQLでも複数のSQLを一括実行することはできる。
今回は試作段階なので改善点は多々あり。
- psqlでログインするユーザー名やデータベース名やホスト名はシェルの引数で指定できるようにすべし
- 作成したテーブルの定義も一括で確認できるようにすべし
- result.logに実行した日時とどのDBオブジェクトを適用したのか出力にすべし。