2011-08-01 22 views
100

postgresqlの関数とトリガソースコードを出力するには?もし誰かがその関数を表示するクエリを知っていれば、私に教えてください、ソースコードを起動します。関数、プロシージャを表示する方法は、postgresqlのソースコードをトリガする?

+5

、それは' pg_trigger SELECT * FROMだ - さらに参考のために

トリガは 'select tgrelid :: regclass、tgname from pg_trigger;に適用されます。' FWIW ' – rogerdpack

答えて

15

多くの可能性があります。最も単純な方法は、pgAdminを使用してSQLウィンドウからこれを取得することです。しかし、これをプログラマチックに入手したい場合は、pg_procpg_triggerシステムカタログまたはroutinestriggersという情報スキーマからのビュー(SQLの標準的な方法ですが、特にPostgreSQL特有のすべての機能をカバーしていない可能性があります)を調べてください。たとえば、次のように

SELECT 
    routine_definition 
FROM 
    information_schema.routines 
WHERE 
    specific_schema LIKE 'public' 
    AND routine_name LIKE 'functionName'; 
+2

Mmmm ..私はルーチンroutine_bodyに空のルーチン定義と、状態 'EXTERNAL'を持つPGPSQL関数を持っています。私はそれらを見つけることができる任意のヒント? – alfonx

+2

+1これはより標準的な/ポータブルなソリューションです。ビューの場合、SQLは次のようになります。 'SELECT view_definition FROM information_schema.views WHERE table_schema =? AND table_name =? ' – Franta

+0

しかし、誰かが同じ名前と異なる関数引数を持つ関数を作ったので、関数名が一意でない場合はどうでしょうか? https://stackoverflow.com/questions/47341513/postgresql-how-to-display-function-or-trigger-or-view-code-for-a-unique-item – mg1075

94

関数の場合:

あなたはもう一つの方法は、ちょうどそのことができますcommont \df\efを実行することであるだけで、次の

select proname,prosrc from pg_proc where proname= your_function_name; 

として、はpg_procビューを照会することができます関数をリストします。

skytf=> \df   
              List of functions 
Schema |   Name   | Result data type |    Argument data types    | Type 
--------+----------------------+------------------+------------------------------------------------+-------- 
public | pg_buffercache_pages | SETOF record  |            | normal 


skytf=> \ef pg_buffercache_pages 

機能のソースコードが表示されます。

トリガーの

私は、ソースコードを入手するための直接的な方法があるかどうかを知るdont't。ちょうど次の方法を知っている、それはあなたに役立つかもしれません!

  • ステップ1:トリガーのテーブルのOIDを取得します:
 
    skytf=> select tgrelid from pg_trigger where tgname='insert_tbl_tmp_trigger'; 
     tgrelid 
    --------- 
     26599 
    (1 row) 
  • ステップ2:上記のOIDのテーブル名を取得します!
 
    skytf=> select oid,relname from pg_class where oid=26599; 
     oid |   relname   
    -------+----------------------------- 
    26599 | tbl_tmp 
    (1 row) 
  • ステップ3:リストそれはあなたのテーブルのトリガの詳細が表示されます
 
    skytf=> \d tbl_tmp 

テーブル情報。通常、トリガは関数を使用します。だから私が指摘したように、トリガー関数のソースコードを得ることができます!

+0

**表示方法**インストール済みの機能EXTENSION?**例[ltree](https://www.postgresql.org/docs/current/static/ltree.html)を使用していますが、 '\ df ltxtquery'で応答がありません。 –

99

\df+psqlにはソースコードがあります。あなたは、SQLインターフェイスからこれを使用することができます@フランの答えに加えて

+13

いいです:)私はあなたの関数の名前を見つけるために '\ df'を使い、次に拡張出力のために' \ x'を、次に '\ df + name_of_function'を入力することをお勧めします。 –

+8

\ df + \ sfがそのトリックを行います! – Telic

+0

インストールされたEXTENSIONの**機能の見方?**例[ltree](https://www.postgresql.org/docs/current/static/ltree.html)を使用していますが、 \ df ltxtquery'です。 –

16

をここでは、PostgreSQL-9からのいくつかの例です。5

リストを表示します:

  1. 機能:\df+
  2. トリガ:\dy+

表示定義:

postgres=# \sf 
function name is required 

postgres=# \sf pg_reload_conf() 
CREATE OR REPLACE FUNCTION pg_catalog.pg_reload_conf() 
RETURNS boolean 
LANGUAGE internal 
STRICT 
AS $function$pg_reload_conf$function$ 

postgres=# \sf pg_encoding_to_char 
CREATE OR REPLACE FUNCTION pg_catalog.pg_encoding_to_char(integer) 
RETURNS name 
LANGUAGE internal 
STABLE STRICT 
AS $function$PG_encoding_to_char$function$ 
1

\sf psqlのfunction_nameは、単一の関数の編集可能なソースコードを生成します。 https://www.postgresql.org/docs/9.6/static/app-psql.htmlから

\ SF [+] function_description このコマンドは、フェッチと、CREATE OR REPLACE FUNCTIONコマンドの形式で、指定された関数の定義を示しています。

+を得ることについてどのように、関数本体の最初の行は、単に機能を表示するよりもわずかにライン1

3

ことで、出力ラインは番号が付けられ、コマンド名に付加されている場合インプレース機能も編集します。

\ef <function_name>は非常に便利です。関数のソースコードを編集可能な形式で開きます。 あなたはそれを見ることができるだけでなく、編集して実行することもできます。

function_nameを指定しないで\efを編集すると、編集可能なCREATE FUNCTIONテンプレートが開きます。 `または、あなたはまた、どのテーブルそれぞれを見たい場合は、すべてのトリガーを一覧表示する方法を把握しようとここに来た信者のためのノートとして>https://www.postgresql.org/docs/9.6/static/app-psql.html

関連する問題