답변:
\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;
또 다른 방법은 바로 commont을 실행할 수 있다는 것입니다 \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'; 트 그리드 --------- 26599 (1 행)
skytf => pg_class에서 oid, relname을 선택하십시오. oid = 26599; oid | 성명 ------- + ----------------------------- 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
확장 된 디스플레이를 켭 첫째도 가독성에 도움이됩니다.
많은 가능성이 있습니다. 가장 간단한 방법은 pgAdmin을 사용하여 SQL 창에서 가져 오는 것입니다. 당신이 examinate 프로그래밍 다음이 얻을하려는 경우 pg_proc
및 pg_trigger
시스템 카탈로그 나 routines
및 triggers
정보 스키마 뷰 (의 표준 방법을 SQL 것을,하지만 모든 특히 PostgreSQL의 특정 기능을 포함하지 않을 수 있습니다). 예를 들면 다음과 같습니다.
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없이 편집 기능 템플릿을 만들 열립니다.
추가 참조-> 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에 적용되는 테이블을 확인하려는 경우