PostgreSQLスキルアップノート(自己啓発のための個人サイト)
作成済みのファンクションを調べる(PL/pgSQL、SQL関数等)
【一覧に戻る】
マニュアルへのリンクは9.2としています。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ 作成済みのファンクションを調べる(PL/pgSQL、SQL関数等)
■■■■
■■■■
■■■■ 2013/03/02
■■■■ 使用環境:PostgreSQL9.1.7 (CentOS6.2)
(C) 2013 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ファンクションを調べる方法には大きく分けて2つある。
方法1:psqlのメタコマンドを使用する方法
方法2:システムカタログを参照する方法
【マニュアル】
リファレンス・psql→●[マニュアル]
第 45章システムカタログ・pg_proc→●[マニュアル]
【マニュアル参考】
−
【その他】
−
■1■ 確認用準備
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
以下によりSQL関数とPL/pgSQLの2種類の簡単なファンクションを作成しておく。
【□】 su - postgres
【□】 psql database1 dba01
【□】 テーブル作成
DROP TABLE t1;CREATE TABLE t1 AS SELECT 'aaaaa'::varchar(10) AS c1;
【□】 ファンクション(SQL関数)作成
DROP FUNCTION fnc_test1(varchar);
CREATE FUNCTION fnc_test1(varchar) RETURNS SETOF t1 AS $$
SELECT * FROM t1 WHERE c1 = $1;
$$ LANGUAGE SQL;
【□】 ファンクション(PL/pgSQL関数)を作成
DROP FUNCTION fnc_test2(varchar);
CREATE OR REPLACE FUNCTION fnc_test2(p1 varchar) RETURNS int AS $$
DECLARE
kekka int;
BEGIN
SELECT COUNT(*) INTO kekka FROM t1 WHERE c1 LIKE $1 || '%';
RETURN kekka;
END;
$$ LANGUAGE plpgsql;
■2■ psqlメタコマンドによる確認
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1.一覧程度の確認
──────────────────────────────
【□】 \df fnc_test*
関数一覧
スキーマ | 名前 | 結果のデータ型 | 引数のデータ型 | 型
----------+-----------+----------------+----------------------+----------------
public | fnc_test1 | SETOF t1 | character varying | normal(通常)
public | fnc_test2 | integer | p1 character varying | normal(通常)
2.ソースコードの表示
──────────────────────────────
【□】 \df+ fnc_test*
関数一覧
スキーマ | 名前 | 結果のデータ型 | 引数のデータ型 | 型 | 揮発性 | 所有者 | 言語 | ソースコード | 説明
----------+-----------+----------------+----------------------+----------------+--------+--------+---------+---------------------------------------------------------------+------
public | fnc_test1 | SETOF t1 | character varying | normal(通常) | 揮発性 | dba01 | sql | +|
| | | | | | | | SELECT * FROM t1 WHERE c1 = $1; +|
| | | | | | | | |
public | fnc_test2 | integer | p1 character varying | normal(通常) | 揮発性 | dba01 | plpgsql | +|
| | | | | | | | DECLARE +|
| | | | | | | | kekka int; +|
| | | | | | | | BEGIN +|
| | | | | | | | SELECT COUNT(*) INTO kekka FROM t1 WHERE c1 LIKE $1 || '%';+|
| | | | | | | | RETURN kekka; +|
| | | | | | | | END; +|
| | | | | | | | |
■2■ pg_procシステムカタログによる確認方法
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1.一覧程度の確認
──────────────────────────────
【□】 SELECT pronamespace,proname,proowner,prolang FROM pg_proc WHERE proname LIKE 'fnc_test%';
pronamespace | proname | proowner | prolang
--------------+-----------+----------+---------
2200 | fnc_test1 | 16393 | 14
2200 | fnc_test2 | 16393 | 12510
2.ソースコードの表示
──────────────────────────────
【□】 SELECT proname,prosrc FROM pg_proc WHERE proname like 'fnc_test%';
proname | prosrc
-----------+---------------------------------------------------------------
fnc_test1 | +
| SELECT * FROM t1 WHERE c1 = $1; +
|
fnc_test2 | +
| DECLARE +
| kekka int; +
| BEGIN +
| SELECT COUNT(*) INTO kekka FROM t1 WHERE c1 LIKE $1 || '%';+
| RETURN kekka; +
| END; +
|
その他詳細についてはマニュアルを参照。
第 45章システムカタログ・pg_proc→●[マニュアル]
以上