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→●[マニュアル]



以上 
inserted by FC2 system