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 行)