Programing

postgresql에서 함수, 프로 시저를 표시하고 소스 코드를 트리거하는 방법은 무엇입니까?

crosscheck 2020. 6. 18. 21:20
반응형

postgresql에서 함수, 프로 시저를 표시하고 소스 코드를 트리거하는 방법은 무엇입니까?


postgresql에서 함수를 인쇄하고 소스 코드를 트리거하는 방법은 무엇입니까? 함수를 표시하는 쿼리를 아는 사람이 있으면 알려주십시오. 소스 코드가 트리거됩니다.


\df+psql의 당신에게 소스 코드를 제공합니다.


기능 :

다음과 같이 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

함수의 소스 코드가 표시됩니다.

트리거의 경우 :

소스 코드를 얻는 직접적인 방법이 있는지 모르겠습니다. 다음과 같은 방법을 알고 있으면 도움이 될 것입니다!

  • 1 단계 : 트리거가없는 테이블을 가져옵니다.
    skytf => pg_trigger에서 tgrelid를 선택하십시오. 여기서 tgname = 'insert_tbl_tmp_trigger';
      트 그리드
    ---------
       26599
    (1 행)
  • 2 단계 : 위의 OID의 테이블 이름을 가져옵니다!
    skytf => pg_class에서 oid, relname을 선택하십시오. 여기서 oid = 26599;
      oid | 성명           
    ------- + -----------------------------
     26599 | tbl_tmp
    (1 행)
  • 3 단계 : 테이블 정보 나열
    skytf => \ d tbl_tmp

테이블 트리거의 세부 사항이 표시됩니다. 일반적으로 트리거는 기능을 사용합니다. 따라서 위에서 지적한 것처럼 트리거 함수의 소스 코드를 얻을 수 있습니다!


다음은 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$

There are many possibilities. Simplest way is to just use pgAdmin and get this from SQL window. However if you want to get this programmatically then examinate pg_proc and pg_trigger system catalogs or routines and triggers views from information schema (that's SQL standard way, but it might not cover all features especially PostgreSQL-specific). For example:

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

Slightly more than just displaying the function, how about getting the edit in-place facility as well.

\ef <function_name> is very handy. It will open the source code of the function in editable format. You will not only be able to view it, you can edit and execute it as well.

Just \ef without function_name will open editable CREATE FUNCTION template.

For further reference -> https://www.postgresql.org/docs/9.6/static/app-psql.html


additionally to @franc's answer you can use this from sql interface:

select 
    prosrc
from pg_trigger, pg_proc
where
 pg_proc.oid=pg_trigger.tgfoid
 and pg_trigger.tgname like '<name>'

(taken from here: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com)


\sf function_name in psql yields editable source code of a single function.

From https://www.postgresql.org/docs/9.6/static/app-psql.html:

\sf[+] function_description This command fetches and shows the definition of the named function, in the form of a CREATE OR REPLACE FUNCTION command.

If + is appended to the command name, then the output lines are numbered, with the first line of the function body being line 1.

참고URL : https://stackoverflow.com/questions/6898453/how-to-display-the-function-procedure-triggers-source-code-in-postgresql

반응형