PostgreSQL の PL/pgSQL 関数のソースを確認する

PostgreSQL に格納されている PL/pgSQL 関数のソースを確認するメモです。

次の test という関数で確認してみます。

CREATE OR REPLACE FUNCTION test(f1 TEXT, f2 TEXT)
RETURNS TEXT AS
$$
DECLARE
BEGIN
    RETURN 'This is a pen!';
END;
$$
LANGUAGE PLPGSQL;

関数の情報が格納されている pg_proc カタログから取得します。 prosrc 列にソースが格納されています。

db=# SELECT prosrc FROM pg_proc WHERE proname = 'test';

            prosrc
------------------------------

DECLARE
BEGIN
     RETURN 'This is a pen!';
END;

(1 row)

pg_proc カタログには 他にも色々な情報が格納されています。

db=# \x
db=# SELECT * FROM pg_proc WHERE proname = 'test';

-[ RECORD 1 ]--+-----------------------------
proname        | test
pronamespace   | 27944
proowner       | 16384
prolang        | 34946
procost        | 100
prorows        | 0
proisagg       | f
prosecdef      | f
proisstrict    | f
proretset      | f
provolatile    | v
pronargs       | 2
prorettype     | 25
proargtypes    | 25 25
proallargtypes |
proargmodes    |
proargnames    | {f1,f2}
prosrc         |
               : DECLARE
               : BEGIN
               :     RETURN 'This is a pen!';
               : END;
               :
probin         | -
proconfig      |
proacl         |

proargnames が引数の名前で proargtypes が引数のデータ型です。 prorettype は戻り値のデータ型です。

【参考サイト】
PostgreSQL 8.1.0 文書 41.24. pg_proc

Google サイト内検索

Amazonアソシエイト