いきなり PREPARE と書いても 知らない人は「何それ?」となると思います。 PREPARE は PostgreSQL において SQL 文の予約をしてくれるメソッドです。 SQL 文の一時的な関数化と考えても良いかもしれません。
実際の使い方ですが、次のように宣言します。
db=# PREPARE sql_1 AS SELECT tablename from pg_tables; PREPARE
これで sql_1 という名前で登録できました。
予約した SQL 文を実行するには EXECUTE を使用します。
db=# EXECUTE sql_1; tablename ------------------------- sql_features sql_implementation_info sql_languages sql_packages sql_sizing sql_sizing_profiles
PREPARE には SELECT,INSERT,UPDATE,DELETE が使用できて 接続が切れるまで有効です。
SQL 文中の値を引数で変えることもできます。
db=# PREPARE sql_2 (varchar) AS SELECT tablename db-# from pg_tables db-# where tablename = $1; PREPARE
引数は 1つめから順番に 変数 $1,$2,$3... で受けます。
EXECUTE で実行するときに値を指定します。
db=# EXECUTE sql_2('pg_index');
tablename
-----------
pg_index
(1 row)
大きなメリットとして EXECUTE したときに実行計画などの準備をしないため ( PREPARE したときに準備されます) 同じ SQL 文を何度も使用する場合、速度が上がります。