postgresql에서 함수, 프로시저, 트리거 소스 코드를 표시하는 방법은 무엇입니까?
postgresql에서 함수와 트리거 소스 코드를 인쇄하는 방법은 무엇입니까? 함수를 표시하기 위한 쿼리를 아는 사람이 있으면 알려주십시오. 트리거 소스 코드.
\df+
psql에서 소스 코드를 제공합니다.
기능의 경우:
다음과 같이 pg_dll 보기를 쿼리할 수 있습니다.
select proname,prosrc from pg_proc where proname= your_function_name;
또 다른 방법은 일반 명령을 실행하는 것입니다.\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';tgrelid---------26599(1행)
- 2단계: 위 oid의 테이블 이름을 가져옵니다!
skytf=> oid 선택, pg_class에서 relname(여기서 oid=26599);oid | 이름 바꾸기-------+-----------------------------26599 | tbl_tmp(1행)
- 3단계: 표 정보 나열
skytf=> \dtbl_tmp
테이블 트리거에 대한 세부 정보가 표시됩니다.일반적으로 트리거는 기능을 사용합니다.그래서 당신은 위에서 지적한 것처럼 트리거 기능의 소스 코드를 얻을 수 있습니다!
다음은 Postgre의 몇 가지 예입니다.SQL-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$
많은 가능성이 있습니다.가장 간단한 방법은 pgAdmin을 사용하여 SQL 창에서 이를 가져오는 것입니다.그러나 이를 프로그래밍 방식으로 가져오려면 정보 스키마에서 카탈로그나 보기 또는 보기를 검토하고 시스템합니다(SQL 표준 방법이지만 일부 기능, 특히 Postgre를 포함하지 않을 수 있음).SQL 관련).예:
SELECT
routine_definition
FROM
information_schema.routines
WHERE
specific_schema LIKE 'public'
AND routine_name LIKE 'functionName';
단순히 기능을 표시하는 것 이상으로 편집 기능도 함께 사용하는 것은 어떻습니까?
\ef <function_name>
매우 편리합니다.함수의 소스 코드를 편집 가능한 형식으로 엽니다.볼 수 있을 뿐만 아니라 편집하고 실행할 수 있습니다.
그저.\ef
function_name을 사용하지 않으면 편집 가능한 CREATE 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이 됩니다.
@prefix의 답변 외에도 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 n.nspname as function_schema,
p.proname as function_name,
l.lanname as function_language,
case when l.lanname = 'internal' then p.prosrc
else pg_get_functiondef(p.oid)
end as definition,
pg_get_function_arguments(p.oid) as function_arguments,
t.typname as return_type
from pg_proc p
left join pg_namespace n on p.pronamespace = n.oid
left join pg_language l on p.prolang = l.oid
left join pg_type t on t.oid = p.prorettype
where n.nspname not in ('pg_catalog', 'information_schema')
order by function_schema,
function_name;
모든 기능에서 특정 단어나 텍스트를 검색하려면 다음 기능에서 텍스트를 바꾸어야 합니다.
with tbl as (
select n.nspname as function_schema,
p.proname as function_name,
l.lanname as function_language,
case when l.lanname = 'internal' then p.prosrc
else pg_get_functiondef(p.oid)
end as definition,
pg_get_function_arguments(p.oid) as function_arguments,
t.typname as return_type
from pg_proc p
left join pg_namespace n on p.pronamespace = n.oid
left join pg_language l on p.prolang = l.oid
left join pg_type t on t.oid = p.prorettype
where n.nspname not in ('pg_catalog', 'information_schema')
)
select *
from tbl
where definition ilike '%word or text you want to search%'
order by function_schema,
function_name;
언급URL : https://stackoverflow.com/questions/6898453/how-to-display-the-function-procedure-triggers-source-code-in-postgresql
'code' 카테고리의 다른 글
폴더의 파일 이름을 순차 번호로 변경 (0) | 2023.05.03 |
---|---|
두 배열을 에서 병합하는 중입니다.그물 (0) | 2023.05.03 |
이클립스에서 이 원치 않는 바를 제거하려면 어떻게 해야 합니까? (0) | 2023.05.03 |
Angular-cli를 사용하여 하나의 검정 규격만 실행하는 방법 (0) | 2023.05.03 |
어셈블리 '마이크로소프트'.SqlServer.유형의 버전 10 이상을 찾을 수 없습니다. (0) | 2023.05.03 |