a.sql
-- Function: get_config(text)
-- DROP FUNCTION config(text);
CREATE OR REPLACE FUNCTION config(k text DEFAULT 'test'::text)
RETURNS text AS
$BODY$
DECLARE v text;
BEGIN
--
EXECUTE 'SELECT val FROM config WHERE key = $1;'
USING k
INTO v;
--
return v;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION config(text)
OWNER TO todanano;
こんな関数を作る。引数はデフォルト値が設定されている。
pg_procをselectして、このデフォルト値を確認すると、以下の内容が得られる。
"({CONST :consttype 25 :consttypmod -1 :constlen -1 :constbyval false :constisnull false :location 118 :constvalue 8 [ 32 0 0 0 116 101 115 116 ]})"
これの読み解き方が分からない・・・。
最終的に欲しい内容は、この訳の分からないpg_node_treeという型のデータから、
DEFAULT ~の部分を作りたいだけ、、、。
うーん・・・。
と、悩んでいましたが、調べていたら自己解決しました。
上記内容を手作業で読み解くのは、かなり難しい(というか全然分からない)が、
以下の関数に対して、pg_procのoidを渡せば、勝手に解釈した内容を渡してくれる。
pg_get_function_arguments(pg_proc.oid);
以下の内容を得る。
"k text DEFAULT 'test'::text"
:)
psqlの\dとかではなくて、select文で関数の一覧を取得して、
それぞれのcreate文を得たい、というのが最終目的だったが、
以下の関数で、割とあっさり出てしまった・・・。うーむ。
pg_get_functiondef(pg_proc.oid);
ただ、これで得られる内容だけだと、なぜかコストの設定とか、言語何使うの?とか
出力してくれないので、pg_procテーブルを結局見ながら、そのあたりを追加する必要がある。
(そのまま実行できるクエリ吐いてくれぇ・・・・)