Respostas:
\df+
no psql fornece o código fonte.
\df
para encontrar o nome da sua função, em seguida, \x
para a saída expandido, em seguida,\df+ name_of_function
\df ltxtquery
.
\x ON
é uma obrigação para a exibição transposta
Para função:
você pode consultar a visualização pg_proc, da seguinte maneira
select proname,prosrc from pg_proc where proname= your_function_name;
Outra maneira é simplesmente executar o commont \df
e \ef
listar as funções.
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
Ele mostrará o código fonte da função.
Para gatilhos:
Não sei se existe uma maneira direta de obter o código fonte. Basta saber da seguinte maneira, pode ser que ele irá ajudá-lo!
skytf => selecione tgrelid em pg_trigger onde tgname = 'insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 linha)
skytf => selecione oid, relname de pg_class onde oid = 26599; oid | relname ------- + ----------------------------- 26599 tbl_tmp (1 linha)
skytf => \ d tbl_tmp
Ele mostrará os detalhes do gatilho da tabela. Normalmente, um gatilho usa uma função. Assim, você pode obter o código fonte da função de trigger, exatamente como o indicado acima!
Aqui estão alguns exemplos do PostgreSQL-9.5
Exibir lista:
\df+
\dy+
Definição de exibição:
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
primeiro para ativar a exibição expandida também ajuda na legibilidade.
Existem muitas possibilidades. A maneira mais simples é usar o pgAdmin e obtê-lo na janela SQL. No entanto, se você deseja obter isso programaticamente, em seguida, examinate pg_proc
e pg_trigger
catálogos do sistema ou routines
e triggers
vistas de esquema de informações (que do SQL forma padrão, mas pode não cobrir todas as características específicas PostgreSQL, especialmente). Por exemplo:
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
column
Um pouco mais do que apenas exibir a função, que tal obter as instalações de edição no local também.
\ef <function_name>
é muito útil. Ele abrirá o código fonte da função em formato editável. Você não apenas poderá visualizá-lo, mas também poderá editá-lo e executá-lo.
Apenas \ef
sem function_name, será aberto o modelo editável de CREATE FUNCTION.
Para referência adicional -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
nome_da_função no psql gera código fonte editável de uma única função.
Em https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Este comando busca e mostra a definição da função nomeada, na forma de um comando CREATE OR REPLACE FUNCTION.
Se + for anexado ao nome do comando, as linhas de saída serão numeradas, com a primeira linha do corpo da função sendo a linha 1.
Além da resposta do @ franc, você pode usá-lo na interface sql:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(extraído daqui: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Desde a versão: psql (9.6.17, servidor 11.6)
Eu tentei todas as respostas acima, mas para mim
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 parece não estar funcionando para mim.
select * from pg_trigger;
ou, se você também deseja ver qual tabela cada gatilho se aplica aoselect tgrelid::regclass, tgname from pg_trigger;
FWIW `