Câu trả lời:
\df+
trong psql cung cấp cho bạn mã nguồn.
\df
để tìm tên hàm của mình, sau đó \x
cho đầu ra mở rộng, sau đó\df+ name_of_function
\df ltxtquery
.
\x ON
là phải cho màn hình chuyển đổi
Đối với chức năng:
bạn có thể truy vấn chế độ xem pg_proc, như sau
select proname,prosrc from pg_proc where proname= your_function_name;
Một cách khác là chỉ cần thực hiện commont \df
và \ef
có thể liệt kê các hàm.
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
Nó sẽ hiển thị mã nguồn của hàm.
Đối với kích hoạt:
Tôi không biết có cách nào trực tiếp để lấy mã nguồn không. Chỉ cần biết cách sau đây, có thể nó sẽ giúp bạn!
skytf => chọn tgrelid từ pg_trigger trong đó tgname = 'insert_tbl_tmp_trigger'; tgrelid --------- 26599 (1 hàng)
skytf => chọn oid, relname từ pg_group trong đó oid = 26599; oid | tên hiệu ------- + ----------------------------- 26599 | tbl_tmp (1 hàng)
skytf => \ d tbl_tmp
Nó sẽ cho bạn thấy các chi tiết kích hoạt của bảng. Thông thường một kích hoạt sử dụng một chức năng. Vì vậy, bạn có thể lấy mã nguồn của hàm kích hoạt giống như ở trên mà tôi đã chỉ ra!
Dưới đây là một vài ví dụ từ PostgreSQL-9.5
Danh sách hiển thị:
\df+
\dy+
Định nghĩa hiển thị:
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
đầu tiên để bật màn hình mở rộng cũng giúp dễ đọc.
Có nhiều khả năng. Cách đơn giản nhất là chỉ sử dụng pgAdmin và lấy cái này từ cửa sổ SQL. Tuy nhiên nếu bạn muốn có được điều này lập trình sau đó examinate pg_proc
và pg_trigger
catalog hệ thống hay routines
và triggers
quan điểm từ giản đồ thông tin (mà của SQL cách tiêu chuẩn, nhưng nó có thể không bao gồm tất cả các tính năng đặc biệt PostgreSQL cụ thể). Ví dụ:
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
cột
Hơi nhiều hơn là chỉ hiển thị chức năng, làm thế nào về việc chỉnh sửa cơ sở tại chỗ là tốt.
\ef <function_name>
rất tiện dụng Nó sẽ mở mã nguồn của hàm ở định dạng có thể chỉnh sửa. Bạn sẽ không chỉ có thể xem nó, bạn có thể chỉnh sửa và thực hiện nó.
Chỉ cần \ef
không có function_name sẽ mở mẫu CREATE FUNCTION có thể chỉnh sửa.
Để tham khảo thêm -> https://www.postgresql.org/docs/9.6/static/app-psql.html
\sf
function_name trong psql mang lại mã nguồn có thể chỉnh sửa của một hàm duy nhất.
Từ https://www.postgresql.org/docs/9.6/static/app-psql.html :
\ sf [+] function_description Lệnh này tìm nạp và hiển thị định nghĩa của hàm được đặt tên, dưới dạng lệnh TẠO HOẶC THAY THẾ CHỨC NĂNG.
Nếu + được gắn vào tên lệnh, thì các dòng đầu ra được đánh số, với dòng đầu tiên của thân hàm là dòng 1.
ngoài ra câu trả lời của @ franc bạn có thể sử dụng điều này từ giao diện sql:
select
prosrc
from pg_trigger, pg_proc
where
pg_proc.oid=pg_trigger.tgfoid
and pg_trigger.tgname like '<name>'
(lấy từ đây: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )
Kể từ phiên bản: psql (9.6.17, máy chủ 11.6)
Tôi đã thử tất cả các câu trả lời trên nhưng đối với tôi
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 dường như không làm việc cho tôi.
select * from pg_trigger;
hoặc, nếu bạn cũng muốn xem mỗi bảng kích hoạt áp dụng choselect tgrelid::regclass, tgname from pg_trigger;
FWIW `