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의 몇 가지 예입니다.
표시 목록 :
- 기능 :
\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$
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.
'Programing' 카테고리의 다른 글
PDO는 마지막으로 삽입 된 ID를 얻습니다 (0) | 2020.06.18 |
---|---|
단위 테스트 : DateTime.Now (0) | 2020.06.18 |
문자열을 System.IO.Stream으로 변환 (0) | 2020.06.18 |
EntityManager에 대한 지속성 제공자가 없습니다. (0) | 2020.06.18 |
jQuery 변경 입력 텍스트 값 (0) | 2020.06.18 |