ORACLE の sql*plus などと同じように psql でも変数を扱うことができます。
変数は set コマンドで値を代入します。
db=# \set value 2
上の例では、value という変数に 2 を入れました。
前回の echo コマンドで、値を出力できます。
db=# \echo :value 2
SQL の中で使用することもできます。
db=# SELECT :value; ?column? ---------- 2 (1 row)
変数を使って SQL の条件を設定することもできます。
db=# \set start 3 db=# \set end 10 db=# \echo :start - :end 3 - 10
変数を設定して、WHERE 句で使用します。
db=# SELECT * FROM generate_series(1, 100) db-# WHERE generate_series between :start AND :end; generate_series ----------------- 3 4 5 6 7 8 9 10 (8 rows)
意味の無い SQL ですが、3 から 10 にしぼれています。
コマンドの結果も変数に代入できますが、 文字列を扱う場合、エスケープがちょっとややこしいです。
db=# \set today ''''`date +"%Y/%m/%d"`'''' db=# select :today; ?column? ------------ 2012/12/15