[pgsql-jp: 29103] Re: ユーザ定義ファンクションの一覧取得

sugita @ sra.co.jp sugita @ sra.co.jp
2003年 2月 18日 (火) 14:18:19 JST


  杉田です。

From: matsuda <yumatuda @ msoft.co.jp>
Subject: [pgsql-jp: 29095] Re: ユーザ定義ファンクションの一覧取得
Date: Tue, 18 Feb 2003 11:36:25 +0900

;;; ********* QUERY **********
;;; SELECT format_type(p.prorettype, NULL) as "Result data type",
;;;   p.proname as "Name",
;;;   oidvectortypes(p.proargtypes) as "Argument data types"
;;; FROM pg_proc p
;;; WHERE p.prorettype <> 0 AND (pronargs = 0 OR oidvectortypes(p.proargtypes) <> '')
;;; ORDER BY 2, 1, 3;
;;; **************************
;;; 
;;; を確認する事が出来ました。そして、
...
;;; select * from pg_database;
;;; で、datlastsysoidも取得したのですが、datlastsysoidと何を比較すれば良いのでしょうか?

  関数の oid を以下のように比較すると initdb の後に作成されたオブジェクトのみ、
つまり、この場合には、ユーザが作成した関数が選択できます。

    SELECT format_type(p.prorettype, NULL) as "Result data type",
      p.proname as "Name",
      oidvectortypes(p.proargtypes) as "Argument data types"
    FROM pg_proc p
    WHERE p.prorettype <> 0 AND (pronargs = 0 OR oidvectortypes(p.proargtypes) <> '')
=>	  AND
=>	  p.oid > (SELECT datlastsysoid FROM pg_database WHERE datname = 'template1')
    ORDER BY 2, 1, 3;

  実行すると、

    $ psql -f f.sql
     Result data type | Name | Argument data types 
    ------------------+------+---------------------
     integer          | one  | 
    (1 row)

    $ 

;;; #やっぱり頭にusr_とか付けとけば簡単にSELECT出来たんだろうなあ・・・

# それは、綺麗でないので、したくないですね、、、


Kenji Sugita                                      




pgsql-jp メーリングリストの案内