PSQLでコマンドプロンプトからSQLを実行する際に、値を受け渡すことがあります。その方法について書いていきたいと思います。
PSQLコマンドの実行方法
psql -h host -p post -U user -d db -v name=nakamoto -v type = a -f file.sql
「-v」のあとに受け渡す値を記入します。-vは複数書くこともできます。
「-f」のあとには読み込むファイルを記入します。
データベースへの接続は以下でまとめています。
ファイル側の書き方
変数をセットする
受け渡した変数を別の名前に置き換えたりする時に使います。置き換えない場合、セットする必要はないです。
書き方
\set 変数 :値
複数の変数をセットする
書き方
変数に入れられる値は複数でも可能です。
\set 変数 :値1:値2
例 変数をセット
以下をコマンドで実行した場合。(例)
psql -U postgres -d testdb -v name=item -v type=_b -v user=nakamoto -v id=1 -f test.sql
■ test.sql ファイル
\set ItemId :id
\echo :ItemId
— 1
\set table_name :name
\echo :table_name
— item
\set name_type_table :name:type
\echo :name_type_table
— item_b
–文字列の取り扱い例(シングルクオーテーションで囲う)
\set user_name :’user’
\echo :user_name
— ‘nakamoto’
受け渡した変数が正しいかechoで確認することができます。
文字列を扱うときはシングルクォーテションで囲います。「\set user_name :’user’」のように変数にシングルクォーテーションで囲う方法があります。
変数を利用する
変数は「:変数」と記述することで使用できます。上記でもすでに変数を使用しているのがわかると思います。
例 変数を利用する
以下のコマンドを実行
psql -U postgres -d testdb -v name=item -v type=_b -v user=nakamoto -v id=1 -f test.sql
■ test.sql ファイルの中身
\set ItemId :id
\echo :ItemId
\set table_name :name
\echo :table_name
\set name_type_table :name:type
\echo :name_type_table
\set user_name :’user’
\echo :user_name
\set user_name2 :user
\echo :user_name2
— 変数を利用
SELECT
:user_name,
:’user_name2′,
ItemId,
itemName
FROM :table_name
where ItemId = :ItemId
;
文字列の取り扱いは「:’user_name2′,」のように変数をシングルクォーテーションで囲う方法もあります。