Antworten:
\df+
in psql gibt Ihnen den Quellcode.
\df
vor, den Namen Ihrer Funktion zu finden, dann \x
für die erweiterte Ausgabe, dann\df+ name_of_function
\df ltxtquery
.
\x ON
ist ein Muss für transponierte Anzeige
Für die Funktion:
Sie können die Ansicht pg_proc wie folgt abfragen
select proname,prosrc from pg_proc where proname= your_function_name;
Eine andere Möglichkeit besteht darin, einfach den Befehl auszuführen \df
und \ef
die Funktionen aufzulisten .
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
Es wird der Quellcode der Funktion angezeigt.
Für Auslöser:
Ich weiß nicht, ob es einen direkten Weg gibt, um den Quellcode zu erhalten. Kennen Sie einfach den folgenden Weg, vielleicht hilft es Ihnen!
skytf => wähle tgrelid aus pg_trigger aus, wobei tgname = 'insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 Reihe)
skytf => wähle oid, relname aus pg_class wobei oid = 26599; oid | relname ------- + ----------------------------- 26599 | tbl_tmp (1 Reihe)
skytf => \ d tbl_tmp
Es zeigt Ihnen die Details des Auslösers der Tabelle. Normalerweise verwendet ein Trigger eine Funktion. Sie können also den Quellcode der Triggerfunktion genau wie oben beschrieben abrufen!
Hier einige Beispiele aus PostgreSQL-9.5
Anzeigeliste:
\df+
\dy+
Anzeigedefinition:
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
zuerst die erweiterte Anzeige aktivieren, wird auch die Lesbarkeit verbessert.
Es gibt viele Möglichkeiten. Am einfachsten ist es, einfach pgAdmin zu verwenden und dies aus dem SQL-Fenster abzurufen. Allerdings , wenn Sie programmatisch diese dann examinate erhalten möchten pg_proc
und pg_trigger
Systemkataloge oder routines
und triggers
Ansichten von Informationen Schema (das Standard Weise SQL, aber es könnte nicht decken alle Funktionen besonders PostgreSQL-spezifisch). Beispielsweise:
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
Spalte
Etwas mehr als nur das Anzeigen der Funktion, wie wäre es auch mit der Funktion zum Bearbeiten an Ort und Stelle?
\ef <function_name>
ist sehr praktisch. Der Quellcode der Funktion wird im bearbeitbaren Format geöffnet. Sie können es nicht nur anzeigen, sondern auch bearbeiten und ausführen.
Nur \ef
ohne Funktionsname wird die bearbeitbare Vorlage CREATE FUNCTION geöffnet.
Zur weiteren Bezugnahme -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
Funktionsname in psql liefert den bearbeitbaren Quellcode einer einzelnen Funktion.
Von https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Dieser Befehl ruft die Definition der benannten Funktion ab und zeigt sie in Form eines Befehls CREATE OR REPLACE FUNCTION an.
Wenn + an den Befehlsnamen angehängt wird, werden die Ausgabezeilen nummeriert, wobei die erste Zeile des Funktionskörpers Zeile 1 ist.
Zusätzlich zur Antwort von @ franc können Sie dies über die SQL-Oberfläche verwenden:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(von hier genommen: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Seit Version: psql (9.6.17, Server 11.6)
Ich habe alle oben genannten Antworten außer für mich versucht
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 scheint bei mir nicht zu funktionieren.
select * from pg_trigger;
oder, wenn Sie auch sehen möchten, welche Tabelle jeder Trigger fürselect tgrelid::regclass, tgname from pg_trigger;
FWIW `