Jawaban:
\df+di psql memberi Anda kode sumber.
\dfuntuk menemukan nama fungsi Anda, kemudian \xuntuk output diperluas, lalu\df+ name_of_function
\df ltxtquery.
\x ONadalah suatu keharusan untuk tampilan transpos
Untuk fungsi:
Anda dapat meminta tampilan pg_proc, seperti berikut ini
select proname,prosrc from pg_proc where proname= your_function_name;
Cara lain adalah hanya menjalankan commont \dfdan \efyang dapat membuat daftar fungsi.
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
Ini akan menampilkan kode sumber fungsi.
Untuk pemicu:
Saya tidak tahu apakah ada cara langsung untuk mendapatkan kode sumber. Ketahuilah cara berikut ini, mungkin itu akan membantu Anda!
skytf => pilih tgrelid dari pg_trigger mana tgname = 'insert_tbl_tmp_trigger';
tgrelid
---------
26599
(1 baris)
skytf => pilih oid, relname dari pg_class di mana oid = 26599;
oid | relname
------- + -----------------------------
26599 | tbl_tmp
(1 baris)
skytf => \ d tbl_tmp
Ini akan menunjukkan kepada Anda detail dari pemicu tabel. Biasanya pemicu menggunakan fungsi. Jadi Anda bisa mendapatkan kode sumber fungsi pemicu seperti yang saya tunjukkan di atas!
Berikut adalah beberapa contoh dari PostgreSQL-9.5
Daftar tampilan:
\df+\dy+Definisi tampilan:
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$
\xpertama untuk mengaktifkan tampilan yang diperluas juga membantu keterbacaan.
Ada banyak kemungkinan. Cara paling sederhana adalah dengan hanya menggunakan pgAdmin dan dapatkan ini dari jendela SQL. Namun jika Anda ingin mendapatkan ini secara programatik maka periksa pg_procdan pg_triggerkatalog sistem atau routinesdantriggers pandangan dari skema informasi (itu cara standar SQL, tetapi mungkin tidak mencakup semua fitur terutama PostgreSQL-spesifik). Sebagai contoh:
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.prosrckolom
Sedikit lebih dari sekadar menampilkan fungsi, tetapi juga tentang bagaimana mendapatkan fasilitas edit di tempat.
\ef <function_name>sangat berguna. Ini akan membuka kode sumber fungsi dalam format yang dapat diedit. Anda tidak hanya dapat melihatnya, Anda juga dapat mengedit dan menjalankannya.
Hanya \ef tanpa function_name akan membuka template CREATE FUNCTION yang dapat diedit.
Untuk referensi lebih lanjut -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf function_name di psql menghasilkan kode sumber yang dapat diedit dari fungsi tunggal.
Dari https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Perintah ini mengambil dan menunjukkan definisi dari fungsi yang dinamai, dalam bentuk perintah CREATE ATAU REPLACE FUNGSI.
Jika + ditambahkan ke nama perintah, maka baris output diberi nomor, dengan baris pertama dari badan fungsi menjadi baris 1.
selain jawaban @ franc Anda dapat menggunakan ini dari antarmuka sql:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(diambil dari sini: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Sejak Versi: psql (9.6.17, server 11.6)
Saya sudah mencoba semua jawaban di atas tetapi untuk saya
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 sepertinya tidak bekerja untuk saya.
select * from pg_trigger;atau, jika Anda juga ingin melihat tabel mana yang masing-masing pemicu berlaku untukselect tgrelid::regclass, tgname from pg_trigger;FWIW `