2011-08-01 11 views
100

Jak drukować funkcje i wyzwalać kod źródłowy w postgresql? proszę dać mi znać, jeśli ktoś zna zapytanie, aby wyświetlić funkcję, wyzwala kod źródłowy.Jak wyświetlić funkcję, procedurę, uruchamia kod źródłowy w postgresql?

+5

jako uwaga dla zwolenników, którzy dostali tu próbuje dowiedzieć się, w jaki sposób wymienić wszystkich wyzwalaczy, to 'select * from pg_trigger;' lub, jeśli chcesz zobaczyć, która tabela każdy wyzwalacz stosuje się do 'select tgrelid :: regclass, tgname z pg_trigger;' FWIW ' – rogerdpack

Odpowiedz

15

Istnieje wiele możliwości. Najprostszym sposobem jest użycie pgAdmin i uzyskanie tego z okna SQL. Jeśli jednak chcesz uzyskać to programowo, przejrzyj katalogi systemów pg_proc i pg_trigger lub routines i triggers ze schematu informacji (jest to standardowy sposób SQL, ale może nie obejmować wszystkich funkcji, w szczególności specyficznych dla PostgreSQL). Na przykład:

SELECT 
    routine_definition 
FROM 
    information_schema.routines 
WHERE 
    specific_schema LIKE 'public' 
    AND routine_name LIKE 'functionName'; 
+2

Mmmm .. Mam funkcje PGPSQL, które mają pustą procedurę routine_defintion, i określają" EXTERNAL "w polu rutynowe_pola. Jakaś wskazówka, gdzie mogę je znaleźć? – alfonx

+2

+1 To jest bardziej standardowe/przenośne rozwiązanie. W przypadku widoków SQL: SELECT view_definition FROM information_schema.views WHERE table_schema =? AND table_name =? ' – Franta

+0

Ale co z przypadkiem, w którym nazwa funkcji nie jest unikalna, ponieważ ktoś stworzył funkcje o tej samej nazwie i różnych argumentach funkcji? https://stackoverflow.com/questions/47341513/postgresql-how-to-display-function- or-trigger- or-view-code-for-a-unique-item – mg1075

94

dla funkcji:

można wyszukać pogląd pg_proc, tak jak w poniższym

select proname,prosrc from pg_proc where proname= your_function_name; 

Innym sposobem jest to, że po prostu wykonać commont \df i \ef które mogą wymień funkcje.

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 

Wyświetli kod źródłowy funkcji.

wyzwalaczy:

I dont't wiedzieć, czy istnieje bezpośredni sposób, aby uzyskać kod źródłowy. Wystarczy znać następujący sposób, może być to pomoże!

  • krok 1: Get OID tabeli wyzwalacza:
 
    skytf=> select tgrelid from pg_trigger where tgname='insert_tbl_tmp_trigger'; 
     tgrelid 
    --------- 
     26599 
    (1 row) 
  • krok 2: Get nazwę tabeli wyżej OID!
 
    skytf=> select oid,relname from pg_class where oid=26599; 
     oid |   relname   
    -------+----------------------------- 
    26599 | tbl_tmp 
    (1 row) 
  • krok 3: notować informacje stół
 
    skytf=> \d tbl_tmp 

To pokaże Ci szczegóły spuście stołu. Zazwyczaj wyzwalacz używa funkcji. Więc możesz pobrać kod źródłowy funkcji wyzwalającej, tak jak to wyżej wskazałem!

+0

Jak wyświetlić ** funkcje zainstalowanego EXTENSION? ** Przykład Używam [ltree] (https://www.postgresql.org/docs/current/static/ltree.html), ale nie ma odpowiedzi z '\ df ltxtquery'. –

99

\df+ w psql daje kod źródłowy.

+13

Nice one :) Proponuję użyć '\ df', aby znaleźć nazwę funkcji, następnie' \ x' dla rozwiniętego wyjścia, następnie '\ df + nazwa_funkcji' –

+8

\ df + wypisuje dużo więcej niż kod. Jeśli wszystko czego potrzebujesz to kod, \ sf zrobi to! – Telic

+0

Jak wyświetlić ** funkcje zainstalowanego ROZSZERZENIA? ** Przykład Używam [ltree] (https://www.postgresql.org/docs/current/static/ltree.html), ale nie ma odpowiedzi z ' \ df ltxtquery'. –

16

Oto kilka przykładów z PostgreSQL-9.5

listy wyświetlania:

  1. Funkcje: \df+
  2. wyzwalacze: \dy+

Wyświetlacz Definicja:

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$ 
1

\sf function_name w psql daje edytowalny kod źródłowy pojedynczej funkcji.

Z https://www.postgresql.org/docs/9.6/static/app-psql.html:

\ sf [+] function_description Polecenie pobierające i pokazuje definicji funkcji o nazwie, w postaci utworzyć lub zamienić funkcja rozkazu.

Jeśli + jest dołączana do nazwy poleceń, a następnie linie wyjściowe są ponumerowane, z pierwszej linii ciała funkcją jest linia 1.

3

Nieco więcej niż tylko wyświetlanie funkcji, jak o uzyskanie edytować również w miejscu obiektu.

\ef <function_name> jest bardzo przydatny. Otworzy kod źródłowy funkcji w edytowalnym formacie. Nie tylko będzie można go wyświetlić, ale także można go edytować i uruchamiać.

Po prostu \ef bez nazwa_funkcji otworzy edytowalny szablon CREATE FUNCTION.

Dla dalszego odniesienia ->https://www.postgresql.org/docs/9.6/static/app-psql.html

Powiązane problemy