PostgreSQLでメモリ上に仮テーブルのようなものを作る

こんにちは、さるまりんです。

プログラムを書いてて設定ファイルで持つか、テーブルにするか、うーん、それほどでもないか、みたいな時ないですか?

そんな時に仮に値を持つことができたらと思ってこんなことしてみました。

VALUESを使って以下のようなSELECTを書きました。

SELECT * FROM (
 VALUES('りんご', 'red'), ('ぶどう', 'purple'), ('みかん', 'orange'), ('メロン', 'green')
) fruits(name, color);

実行するとこんな感じです。

salu=> SELECT * FROM (
salu(>  VALUES('りんご', 'red'), ('ぶどう', 'purple'), ('みかん', 'orange'), (' メロン', 'green')
salu(> ) fruits(name, color);
  name  | color  
--------+--------
 りんご | red
 ぶどう | purple
 みかん | orange
 メロン | green
(4 rows)

namecolorのカラムを持つfruitsというテーブルの検索結果のように出力されています。

これをテーブルとして使うことができるのでこんなこともできます。

SELECT * FROM (
 VALUES('りんご', 'red'), ('ぶどう', 'purple'), ('みかん', 'orange'), ('メロン', 'green')
) fruits(name, color)
WHERE color = 'orange';

WHEREcolororangeのものに絞ってみました。
実行すると、

salu=> SELECT * FROM (
salu(>  VALUES('りんご', 'red'), ('ぶどう', 'purple'), ('みかん', 'orange'), (' メロン', 'green')
salu(> ) fruits(name, color)
salu-> WHERE color = 'orange';
  name  | color  
--------+--------
 みかん | orange
(1 row)

出力されているのはcolor=’orange’の「みかん」の1レコードだけです。

WHEREできるんだったら、他のテーブルとJOINしたりといろんな使い方ができそうです。

小さな設定値を持たせるなど、実テーブルにする必要もないものをこんな風に仮のメモリー上のテーブルとしてVALUESで作成して利用すると便利なこともあるかも。

これMySQLでは使えないのでその場合の方法はまた考えてみます。

読んでくださってありがとうございました。