2017-12-08 4 views
0

たとえば、ある関数とそれ以外の関数から呼び出された関数の名前を変更したいとします。私は他の機能を編集する必要があるrename_func(schema_name text, old_func_name text, new_func_name text)という関数を書いています。 plpgsqlを使用して)機能の本体を格納していますか?plpgsqlを使用していますか?plpgsql私はシステムテーブルでそのような列を見つけることができません。PostgreSQLの他の関数を編集する関数

私はちょうど

SELECT f.proname, f.prosrc, f.probin -- trouble: f.prosrc and f.probin are empty 
FROM pg_proc f; 

ですべての機能を得ることができますが、私は彼らのコードへのアクセスを望めません。

+2

prosrcは本体を持っています –

+0

空の本体を持つ関数は内部/ C言語関数ではありませんか?彼らは、PostgresがPostgres関数と同じ名前を使ってinternal/c関数を呼び出さなければならないことを示す空のボディを持っていました。私は誰もそれらの名前を変更したいと思う理由を見ません。 –

+0

@ŁukaszKamińskino、その関数は私の関数と同じ名前です –

答えて

0

pg_proc.prosrcの内容が表示されませんでしたが、存在していました。おそらく、複数の文字列が含まれている可能性があります(私はpgAdmin IIIを使用しました)。私はクエリでそれを使用し、それは働いた。

さらに、私は、pg_get_functiondef(func.oid)が、変更可能なDDLスクリプトを返して、後でを実行して機能の変更を保存していることがわかりました。

this answer to other questionに感謝します。