PostgreSQLで一時的な変数を定義・参照する方法


変数を定義する

PostgreSQLでは、set_configという関数があり、これを使うと一時的に有効な変数を定義できる。

SELECT set_config('temp.target_date', '2026/01/01', false);
  • 第一引数:変数名。“xxx.yyy”のフォーマットで任意の名前を指定する。
  • 第二引数:その変数にセットする値。
  • 第三引数:trueの場合、同一トランザクション内でのみこの変数が適用される。falseの場合、同一セッション内でこの変数が適用される。

また、こういう書き方もできる。

SET SESSION temp.target_date to '2026/01/01';
  • “SESSION”は省略可。
  • 同一トランザクション内でのみ適用したい場合は、“SESSION”の部分を”LOCAL”に変える。

定義した変数を参照する

set_configやSETで定義した変数を参照したい場合、以下のように書く。

select current_setting('temp.target_date');

実行結果はこうなる。

| current_setting |
| 2026/01/01      |

当然、以下のように、条件式などで使ってもよい。

select
  *
from
  t_access_log
where
  access_timestamp >= current_setting('temp.target_date') ::DATE;

これ、いつ使う?

保守作業中に書くようなちょっとしたSQLとかに使えそう。 システム内で実行するSQLにはあまり使いたくない。どこで設定された値がどこで参照されているのか管理するのが大変なので。

参考

9.28. システム管理関数