web-dev-qa-db-ja.com

PostgreSQLのテーブルを参照するストアド関数をリストします

簡単で簡単な質問:PostgreSQLでは、可能であれば、SELECTステートメントだけを使用してテーブルを使用して、すべてのストアドファンクション/ストアドプロシージャの名前をどのようにリストしますか?単純なSELECTで不十分な場合は、ストアド関数で間に合わせることができます。

私の質問は、この他の質問にいくらか似ていると思いますが、この他の質問はSQL Server 2005のものです。
テーブルのストアドプロシージャのリスト

(オプション)さらに言えば、同じ方法で同じテーブルを使用するトリガーと制約をどのようにリストしますか?

70
Paolo B.
SELECT  p.proname
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      p.pronamespace = n.oid
WHERE   n.nspname = 'public';
96
Quassnoi
SELECT  proname, prosrc
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';
17
davidwhthomas

Psqlを使用している場合は、\df

Manページから:

Tip
To look up functions taking arguments or returning values of a specific type, use your pager's search capability to scroll through the \df output.

ランニング \set ECHO_HIDDEN\dfは舞台裏で実行されています。

13
dayer4b

@quassnoiおよび@davidwhthomasと同じですが、引数名を追加しました。

SELECT  proname, proargnames, prosrc 
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';

関数をリストする背後にある目的が、それらをクリーンアップするか、変化するparamsリストで新しい関数を反復することである場合、関数をドロップする必要が頻繁にあります。

DROP FUNCTION <name>(<args>);

Proargnamesを追加することにより、ドロップに適用可能な関数名を作成できます。

さらに、関数を評価するときに、より完全な図を見ることができます。

9
Matt Dressel

標準のinformation_schemaスキーマを使用して、データベースに関するメタデータを取得できます(SQL標準に含まれているため、異なるデータベースシステムで同じように機能するはずです)。この場合、 information_schema.routines が必要です。

5

私の recipe を見てください。関数とトリガーを読み取ります。次の情報に基づいています。 PostgreSQLからのMETA情報の抽出(INFORMATION_SCHEMA)

4
Michał Niklas

システムのものを除く:

select proname from pg_proc where proowner <> 1;
4
windyjonas

関数の引数タイプを取得します。これは、[〜#〜] alterで関数を参照するときに必要です。 [〜#〜]-oldevectortypesを使用するとうまくいきました。

PostgreSQLの特定のスキーマのデータベースに保存されているすべての関数のリストを取得するにはどうすればよいですか? を参照してください。

0
storm_m2138