Respuestas:
\df+
en psql te da el código fuente.
\df
para encontrar el nombre de su función, luego \x
para una salida ampliada, luego\df+ name_of_function
\df ltxtquery
.
\x ON
es imprescindible para la visualización transpuesta
Para la función:
puede consultar la vista pg_proc, tal como se muestra a continuación
select proname,prosrc from pg_proc where proname= your_function_name;
Otra forma es que simplemente ejecute el commont \df
y \ef
que pueda enumerar las funciones.
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
Mostrará el código fuente de la función.
Para desencadenantes:
No sé si hay una forma directa de obtener el código fuente. Solo conozca la siguiente manera, ¡puede ser que lo ayude!
skytf => seleccione tgrelid de pg_trigger donde tgname = 'insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 fila)
skytf => seleccione oid, relname de pg_class donde oid = 26599; oid | renombrar ------- + ----------------------------- 26599 | tbl_tmp (1 fila)
skytf => \ d tbl_tmp
Le mostrará los detalles del disparador de la tabla. Por lo general, un disparador usa una función. ¡Para que pueda obtener el código fuente de la función de activación tal como se indicó anteriormente!
Aquí hay algunos ejemplos de PostgreSQL-9.5
Mostrar lista:
\df+
\dy+
Definición de pantalla:
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
primero para encender la pantalla expandida también ayuda con la legibilidad.
Hay muchas posibilidades La forma más simple es usar pgAdmin y obtener esto de la ventana SQL. Sin embargo, si usted desea conseguir esto mediante programación a continuación examinate pg_proc
y pg_trigger
catálogos del sistema o routines
y triggers
vistas de esquema de información (que de forma estándar SQL, pero podría no cubrir todas las características especialmente PostgreSQL-específico). Por ejemplo:
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
columna
Algo más que solo mostrar la función, ¿qué hay de obtener también la función de edición en el lugar?
\ef <function_name>
Es muy útil. Se abrirá el código fuente de la función en formato editable. No solo podrá verlo, también puede editarlo y ejecutarlo.
Solo \ef
sin function_name se abrirá la plantilla editable CREATE FUNCTION.
Para mayor referencia -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
function_name en psql produce el código fuente editable de una sola función.
Desde https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Este comando obtiene y muestra la definición de la función nombrada, en forma de un comando CREAR O REEMPLAZAR FUNCIÓN.
Si se agrega + al nombre del comando, las líneas de salida están numeradas, siendo la primera línea del cuerpo de la función la línea 1.
Además de la respuesta de @Franc, puede usar esto desde la interfaz SQL:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(tomado de aquí: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Desde la versión: psql (9.6.17, servidor 11.6)
He intentado todas las respuestas anteriores, pero para mí
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 que no funciona para mí.
select * from pg_trigger;
o, si también desea ver qué tabla aplica cada desencadenante aselect tgrelid::regclass, tgname from pg_trigger;
FWIW `