4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PostgreSQLにて複数のSQLファイルを一括実行する

Posted at

概要

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オブジェクトを適用したのか出力にすべし。
4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?