Yanıtlar:
\df+içinde psql'in size sourcecode verir.
\dffonksiyonunuzun adını bulmak için kullanmanızı öneririz , sonra \xgenişletilmiş çıktı için, o zaman\df+ name_of_function
\df ltxtquery.
\x ONtranspoze ekran için bir zorunluluktur
Fonksiyon için:
pg_proc görünümünü aşağıdaki gibi sorgulayabilirsiniz
select proname,prosrc from pg_proc where proname= your_function_name;
Başka bir yöntem de commont yürütmek olduğunu \dfve \efhangi işlevleri listeleyebilirsiniz.
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
Fonksiyonun kaynak kodunu gösterecektir.
Tetikleyiciler için:
Kaynak kodunu almak için doğrudan bir yol olup olmadığını bilmiyorum. Sadece aşağıdaki yolu bilin, belki size yardımcı olacaktır!
skytf => pg_trigger'dan tgrelid'i seçin; burada tgname = 'insert_tbl_tmp_trigger';
tgrelid
---------
26599
(1 satır)
skytf => oid seçin, pg_class dosyasından relname; oid = 26599;
oid | relname
------- + -----------------------------
26599 | tbl_tmp
(1 satır)
skytf => \ d Instagram Hesabındaki Resim ve Videoları tbl_tmp
Tablonun tetikleyicisinin ayrıntılarını gösterecektir. Genellikle bir tetikleyici bir işlev kullanır. Böylece tetik işlevinin kaynak kodunu yukarıda belirttiğim gibi alabilirsiniz!
İşte PostgreSQL-9.5'ten birkaç örnek
Ekran listesi:
\df+\dy+Ekran Tanımı:
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$
\xGenişletilmiş ekranı açmak için ilk önce kullanmak da okunabilirliğe yardımcı olur.
Birçok olasılık var. En basit yol sadece pgAdmin kullanmak ve bunu SQL penceresinden almaktır. Eğer irdelemek programlı sonra bu almak istiyorsanız Ancak pg_procve pg_triggersistem katalogları veya routinesve triggersbilgi şemadan görüşlerini (en standart bir yol SQL olduğunu, ama hepsi özellikle PostgreSQL-özgü özellikleri örtmeyebilir). Örneğin:
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.prosrcsütun
Sadece işlevi görüntülemekten biraz daha fazlası, yerinde düzenleme özelliğini de almaya ne dersiniz.
\ef <function_name>çok kullanışlıdır. İşlevin kaynak kodunu düzenlenebilir biçimde açar. Sadece görüntüleyemez, düzenleyebilir ve yürütebilirsiniz.
Sadece \effunction_name düzenlenebilir CREATE FUNCTION şablonunu açar.
Daha fazla referans için -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf psql'deki işlev_adı, tek bir işlevin düzenlenebilir kaynak kodunu verir.
Gönderen https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Bu komut, adlandırılan işlevin tanımını CREATE OR REPLACE FUNCTION komutu şeklinde alır ve gösterir.
Komut adına + eklenirse, çıktı satırları numaralandırılır ve işlev gövdesinin ilk satırı 1. satır olur.
@ franc'ın cevabına ek olarak bunu sql arayüzünden de kullanabilirsiniz:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(buradan alınır: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Sürümden bu yana: psql (9.6.17, sunucu 11.6)
Yukarıdaki cevapların hepsini denedim ama benim için
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 benim için çalışmıyor gibi görünüyor.
select * from pg_trigger;ya da, her bir tetikleyicininselect tgrelid::regclass, tgname from pg_trigger;FWIW ` için hangi tablonun geçerli olduğunu görmek istiyorsanız