PSQLコマンドで値を読み込み先ファイルへsetしSQL文で使う! PostgreSQLの勉強

2020-08-22

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',」のように変数をシングルクォーテーションで囲う方法もあります。

PostgreSQL, SQL

Posted by Nakamoto