回答:
\df+
中にはpsqlあなたにソースコードを提供します。
\df
関数の名前を見つけるためにを使用し、次に\x
拡張出力を使用することをお勧めします\df+ name_of_function
\df ltxtquery
。
\x ON
転置表示には必須です
機能について:
次のように、pg_procビューをクエリできます
select proname,prosrc from pg_proc where proname= your_function_name;
もう1つの方法は、コモント\df
を実行するだけで\ef
、関数を一覧表示できることです。
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
関数のソースコードが表示されます。
トリガーの場合:
ソースコードを直接入手する方法があるかどうかわかりません。ちょうど次の方法を知っている、それがあなたを助けるかもしれません!
skytf => pg_triggerからtgrelidを選択します。ここでtgname = 'insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1列)
skytf => select oid、relname from pg_class where oid = 26599; oid | relname ------- + ----------------------------- 26599 | tbl_tmp (1列)
skytf => \ d tbl_tmp
テーブルのトリガーの詳細が表示されます。通常、トリガーは関数を使用します。したがって、上記で指摘したように、トリガー関数のソースコードを取得できます。
PostgreSQL-9.5の例をいくつか示します
表示リスト:
\df+
\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$
\x
firstを使用して拡張表示をオンにすると、読みやすくなります。
多くの可能性があります。最も簡単な方法は、pgAdminを使用してSQLウィンドウから取得することです。しかし、あなたがexaminateプログラムでこれを取得したい場合pg_proc
やpg_trigger
、システムのカタログやroutines
とtriggers
(それはすべての機能に特にPostgreSQLの特定をカバーしていない可能性があるのSQL標準的な方法ということが、)情報スキーマからの景色。例えば:
SELECT
routine_definition
FROM
information_schema.routines
WHERE
specific_schema LIKE 'public'
AND routine_name LIKE 'functionName';
SELECT view_definition FROM information_schema.views WHERE table_schema = ? AND table_name = ?
pgproc.prosrc
コラム
関数を表示するだけではなく、インプレース編集機能も利用できます。
\ef <function_name>
とても便利です。関数のソースコードを編集可能な形式で開きます。表示できるだけでなく、編集して実行することもできます。
ただ、\ef
FUNCTION_NAMEなしFUNCTIONテンプレートを作成、編集可能なを開きます。
詳細なリファレンス-> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
psqlのfunction_nameは、単一の関数の編集可能なソースコードを生成します。
https://www.postgresql.org/docs/9.6/static/app-psql.htmlから:
\ sf [+] function_descriptionこのコマンドは、名前付き関数の定義をフェッチして、CREATE OR REPLACE FUNCTIONコマンドの形式で表示します。
コマンド名に+が追加されている場合、出力行には番号が付けられ、関数本体の最初の行は1行目です。
@francの回答に加えて、sqlインターフェースからこれを使用できます。
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(ここから取得:http : //www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com)
バージョン以降:psql(9.6.17、サーバー11.6)
私は上記の答えをすべて試しましたが、私にとっては
postgres=> \sf jsonb_extract_path_text
CREATE OR REPLACE FUNCTION pg_catalog.jsonb_extract_path_text(from_json jsonb, VARIADIC path_elems text[])
RETURNS text
LANGUAGE internal
IMMUTABLE PARALLEL SAFE STRICT
AS $function$jsonb_extract_path_text$function$
postgres=> \df+
ERROR: column p.proisagg does not exist
LINE 6: WHEN p.proisagg THEN 'agg'
^
HINT: Perhaps you meant to reference the column "p.prolang".
dfがうまくいかないようです。
select * from pg_trigger;
または、各トリガーがselect tgrelid::regclass, tgname from pg_trigger;
FWIWに適用されるテーブルも確認する場合は、`