【Linux】SQLを実行するシェルスクリプトの作成手順をわかりやすく解説!(PostgreSQL対応)

スポンサーリンク

データベースの運用や開発を行う際、定期的にSQLを実行する機会は多くあります。手作業でSQLを流すこともできますが、毎回コマンドを入力するのは手間がかかります。そこで便利なのが、SQLを自動で実行するシェルスクリプトです。

本記事では、Linux環境でSQLを実行するシェルスクリプトを作成する方法について解説します。対象とするデータベースはPostgreSQLです。

この記事を読むことで、以下のことができるようになります。

  • シェルスクリプトを使ってSQLを実行する方法
  • 自動実行(cron)を設定し、定期的にSQLを実行する方法
  • エラー発生時の対処方法

「サーバー上でSQLを定期実行したい」「SQLの手作業を減らしたい」という方に役立つ内容になっていますので、ぜひ参考にしてください!

SQLを実行するシェルスクリプトの作成

SQLを定期的に実行するために、Linux上でシェルスクリプトを作成します。

PostgreSQLのSQLスクリプトを実行するには、psql コマンドを使用します。以下の手順でシェルスクリプトを作成しましょう。

手順1:SQLファイルを作成する

まず、実行するSQLを記述したファイル script.sql を作成します。

-- script.sql
CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL
);

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

シェルスクリプトを作成する

次に、SQLを実行するためのシェルスクリプト run_postgres.sh を作成します。

#!/bin/bash

# PostgreSQLの接続情報
DB_USER="your_username"
DB_NAME="your_database"
DB_HOST="localhost"
SQL_FILE="script.sql"

# パスワードを環境変数から取得(推奨)
export PGPASSWORD="your_password"

# SQLを実行
psql -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -f "$SQL_FILE"

# 環境変数をクリア
unset PGPASSWORD

実行権限を付与する

スクリプトを実行する前に、権限を付与します。

chmod +x run_postgres.sh

スクリプトを実行する

./run_postgres.sh

成功すると、SQLが実行され、データベースにテーブルが作成されます。

これで、Linux環境でSQLを実行するシェルスクリプトの作成方法が分かりました。
次に、定期的に実行する方法(cronの活用)について解説します。

自動実行の設定(cronの活用)

SQLを定期的に実行したい場合、Linuxのcronを利用することで、自動実行が可能になります。例えば、「毎日深夜3時にSQLを実行する」といったスケジュール設定ができるようになります。

cronとは?

cron(クロン)は、LinuxやUnix系OSで定期的なタスクを自動実行するためのジョブスケジューラーです。cronを利用すると、決まった時間にシェルスクリプトを実行することができます。

cronジョブの登録方法

まず、cronの設定を編集するために以下のコマンドを実行します。

crontab -e

定期実行のスケジュールを設定

以下のようなcronジョブを追加します。ここでは、毎日深夜3時にSQLを実行する際のcronジョブを載せておきます。

0 3 * * * /path/to/run_postgres.sh >> /path/to/logs/cron_log.txt 2>&1

設定を保存して終了

ファイルを保存して閉じると、cronジョブが登録されます。
設定を確認するには、以下のコマンドを実行します。

crontab -l

エラー対策とデバッグ方法

シェルスクリプトでSQLを自動実行する際、エラーが発生すると処理が途中で止まったり、データが正しく更新されなかったりすることがあります。ここでは、エラー対策とデバッグの方法について解説します。

SQLの実行結果をログに記録する

エラーの原因を特定しやすくするために、SQLの実行結果をログファイルに出力しておくと便利です。

下記が、PostgreSQLを使用した場合の記述例になります。

#!/bin/bash
LOG_FILE="/path/to/logs/postgres_log.txt"

# 実行コマンド
PGPASSWORD="your_password" psql -U your_username -d your_database -h localhost -f script.sql > "$LOG_FILE" 2>&1

2>&1 を付けることで、標準エラー出力もログファイルに記録されます。
エラーが発生した場合は、以下のコマンドでログを確認できます。

cat /path/to/logs/postgres_log.txt

または、最新のログだけを確認する場合は次のコマンドを使用します。

tail -f /path/to/logs/postgres_log.txt

スクリプト内でエラーを検出する

スクリプト内でエラーを検出し、適切に処理できるようにします。set -e を使うと、エラーが発生した時点でスクリプトの実行を停止できます。

#!/bin/bash
set -e  # エラーが発生したらスクリプトを終了

PGPASSWORD="your_password" psql -U your_username -d your_database -h localhost -f script.sql
echo "SQL実行完了"

この設定を有効にすると、SQLの実行中にエラーが発生した場合、スクリプトが即座に停止し、後続の処理が実行されません。

手動でデバッグする方法

エラーの原因を特定するために、手動でデバッグする方法も知っておきましょう。

SQLファイルを手動で実行してみる

まず、スクリプトを介さずに手動でSQLを実行し、エラーが出るか確認します。

psql -U your_username -d your_database -h localhost -f script.sql

ここでエラーが出る場合は、SQLの構文エラーや権限の問題を疑いましょう。

シェルスクリプトをデバッグ実行する

bash -x を使うと、シェルスクリプトの各コマンドの実行内容を詳細に確認できます。

bash -x run_postgres.sh

出力される内容を見て、どこでエラーが発生しているのか特定しましょう。

まとめ

本記事では、LinuxでSQLを実行するシェルスクリプトの作成方法について解説しました。

SQLのバッチ処理をスクリプト化し、自動実行できるようにすることで、作業の効率化やヒューマンエラーの削減につながります。本記事の内容を活用して、運用をよりスムーズに進めてみてください!

Linux
スポンサーリンク

コメント