LoginSignup
12
14

More than 5 years have passed since last update.

PostgreSQLシェルスクリプトでSQLに引数を渡して実行

Last updated at Posted at 2018-11-09

シェルスクリプトからSQLを実行する際に引数を渡す方法をご紹介します。

環境

環境はDockerを使って検証しています。
docker
├ PostgreSQL 10.1
└ bash 4.4.12

下記のテーブルは存在している前提です。


CREATE TABLE IF NOT EXISTS test
(
  id        INTEGER,
  username  VARCHAR(30),
  age       INTEGRE
);

手順

数値を渡す場合

シェルスクリプトでは、-vオプションをつけて、「SQLの変数名=数値」または「SQLの変数名=bashの変数」としてSQL実行コマンドに加えます。

init-db.sh
psql -U user -d database < "/docker-entrypoint-initdb.d/insert-example.sql" -v num=1

実行されるSQLでは、「:変数」として値を受け取ります。

insert-example.sql
INSERT INTO test VALUES(1, 'Taro', :num);

文字列を渡す場合

シェルスクリプトでは、同様に-vオプションをつけて、「SQLの変数名="文字列"」または「SQLの変数名="bashの変数"」としてSQL実行コマンドに加えます。

init-db.sh
psql -U user -d database < "/docker-entrypoint-initdb.d/insert-example.sql" -v string="test"

実行されるSQLでは、「:変数」として値を受け取ります。

insert-example.sql
INSERT INTO test VALUES(1, :string, 1);
12
14
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
12
14