psqlとはPostgreSQLのターミナル型SQLクライアントです。
引数に指定した値をSQLファイルの変数にバインドします。
psqlで引数とSQLファイルを指定して実行する サンプルコード
sample.sql
実行するSQLファイル、”:変数”の箇所を置き換えます。
select :foo,
:bar,
:hoge;
p_exec_file.sh
実行するshellです。psqlを呼び出し、”-f”オプションでSQLファイルを指定し、”-v”オプションで引数名と値を設定します。”–echo-all”は実行したSQLを結果と一緒に出力します。
#!/bin/bash
DB_USER="{user_name}"
DB_PWD="{password}"
DB_SERVER="{db_server_url}"
DB_PORT="{db_port}"
DB_NAME="{db_name}"
psql \
-d "postgresql://$DB_USER:$DB_PWD@$DB_SERVER:$DB_PORT/$DB_NAME" \
-f "sample.sql" \
-v foo="now()" \
-v bar="1" \
-v hoge="'test_str'" \
--echo-all
実行結果
p_exec_file.shを実行します。実行したSQL文と結果が出力されます。”foo”に”now()”、”bar”に”1″(数値)、”hoge”に”test_str”(文字)が設定されています。
$ ./p_exec_file.sh
select :foo,
:bar,
:hoge;
now | ?column? | ?column?
-------------------------------+----------+----------
2019-12-28 16:10:25.343578+09 | 1 | test_str
(1 行)