Ecco tre opzioni per elencare tutte le stored procedure in un database Postgres.
Il information_schema.routines
Visualizza
Questa vista contiene tutte le funzioni e le procedure nel database corrente a cui l'utente corrente ha accesso (in quanto proprietario o in possesso di qualche privilegio).
Ecco un esempio di restituzione di un elenco di stored procedure:
SELECT
routine_schema,
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE';
Sentiti libero di includere più colonne se necessario. Puoi ottenere la definizione della procedura con la routine_definition
colonna.
Il pg_proc
Catalogo
Il pg_catalog.pg_proc
il catalogo memorizza informazioni su funzioni, procedure, funzioni aggregate e funzioni della finestra.
Possiamo unirci a questo con il pg_catalog.pg_namespace
catalog per filtrare i risultati alle sole procedure con il public
spazio dei nomi:
SELECT
n.nspname,
p.proname
FROM
pg_catalog.pg_namespace n
JOIN
pg_catalog.pg_proc p ON
p.pronamespace = n.oid
WHERE
p.prokind = 'p'
AND
n.nspname = 'public';
Abbiamo filtrato su un prokind
di p
per limitare i risultati alle stored procedure.
I possibili valori sono f
per una normale funzione, p
per una procedura, a
per una funzione aggregata, o w
per una funzione finestra.
Puoi aggiungere il p.prosrc
colonna per ottenere la definizione della procedura. Oppure potresti passare il p.oid
nella colonna pg_get_functiondef()
funzione. Questa funzione produrrà una CREATE OR REPLACE PROCEDURE
istruzione per la procedura memorizzata.
Il \df
Comando
Quando usiamo psql, possiamo usare il \df
comando:
\df
Per impostazione predefinita, restituisce solo oggetti creati dall'utente. In alternativa puoi fornire un pattern o la S
modificatore per includere oggetti di sistema.
Ecco un esempio di fornitura di un modello:
\df *album*
Quell'esempio restringe i risultati solo a quelle funzioni/procedure con il testo album
a loro nome.
Nota che questo comando restituisce anche funzioni. Il tipo di routine (ad es. func
, proc
) è elencato in un type
colonna nell'output.