2011-08-01 31 views
100

Làm thế nào để in chức năng và kích hoạt mã nguồn trong postgresql? xin vui lòng cho tôi biết nếu có ai biết truy vấn để hiển thị chức năng, kích hoạt mã nguồn.Làm thế nào để hiển thị hàm, thủ tục, kích hoạt mã nguồn trong postgresql?

+5

như một lưu ý cho tín đồ người đã ở đây cố gắng tìm ra cách để liệt kê tất cả gây nên, đó là 'select * from pg_trigger; 'hoặc, nếu bạn cũng muốn xem bảng mỗi trigger áp dụng cho 'select tgrelid :: regclass, tgname từ pg_trigger;' FWIW ' – rogerdpack

Trả lời

15

Có nhiều khả năng. Cách đơn giản nhất là chỉ cần sử dụng pgAdmin và nhận được điều này từ cửa sổ SQL. Tuy nhiên nếu bạn muốn có được điều này theo chương trình sau đó kiểm tra pg_procpg_trigger danh mục hệ thống hoặc routinestriggers lượt xem từ lược đồ thông tin (đó là cách tiêu chuẩn SQL, nhưng nó có thể không bao gồm tất cả các tính năng đặc biệt là PostgreSQL). Ví dụ:

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

Mmmm .. Tôi có các hàm PGPSQL, có một routine_defintion rỗng, và trạng thái 'EXTERNAL' trong trường routine_body. Bất kỳ gợi ý nơi tôi có thể tìm thấy những? – alfonx

+2

+1 Đây là giải pháp tiêu chuẩn/di động hơn. Đối với các khung nhìn, SQL là: 'SELECT view_definition FROM information_schema.views WHERE table_schema =? Và table_name =? ' – Franta

+0

Nhưng những gì về trường hợp một tên chức năng không phải là duy nhất bởi vì ai đó đã thực hiện chức năng với cùng tên và đối số chức năng khác nhau? https://stackoverflow.com/questions/47341513/postgresql-how-to-display-function-or-trigger-or-view-code-for-a-unique-item – mg1075

94

cho chức năng:

bạn có thể truy vấn xem pg_proc, chỉ cần như sau

select proname,prosrc from pg_proc where proname= your_function_name; 

Một cách khác là chỉ thực hiện commont \df\ef mà 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 trigger:

Tôi dont't biết nếu có một cách trực tiếp để lấy mã nguồn. Chỉ cần biết cách sau, có thể nó sẽ giúp bạn!

  • bước 1: Lấy oid bảng của cò:
 
    skytf=> select tgrelid from pg_trigger where tgname='insert_tbl_tmp_trigger'; 
     tgrelid 
    --------- 
     26599 
    (1 row) 
  • bước 2: Lấy tên bảng của oid trên!
 
    skytf=> select oid,relname from pg_class where oid=26599; 
     oid |   relname   
    -------+----------------------------- 
    26599 | tbl_tmp 
    (1 row) 
  • bước 3: liệt kê các thông tin bảng
 
    skytf=> \d tbl_tmp 

Nó sẽ cho bạn thấy các chi tiết của cò của bảng. Thông thường một trigger sử dụng một hàm. 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!

+0

Cách xem ** chức năng của cài đặt EXTENSION? ** Ví dụ tôi đang sử dụng [ltree] (https://www.postgresql.org/docs/current/static/ltree.html), nhưng không có phản hồi với '\ df ltxtquery'. –

99

\df+ trong psql cung cấp cho bạn mã nguồn.

+13

Đẹp nhất :) Tôi đề nghị sử dụng '\ df' để tìm tên hàm của bạn, sau đó' \ x' cho đầu ra mở rộng, sau đó '\ df + name_of_function' –

+8

\ df + xuất nhiều hơn mã. Nếu tất cả những gì bạn muốn là mã, \ sf sẽ thực hiện thủ thuật! – Telic

+0

Cách xem ** các chức năng của EXTENSION đã cài đặt? ** Ví dụ Tôi đang sử dụng [ltree] (https://www.postgresql.org/docs/current/static/ltree.html), nhưng không có phản hồi với ' \ df ltxtquery'. –

16

Dưới đây là vài ví dụ từ PostgreSQL-9.5

danh sách hiển thị:

  1. Chức năng: \df+
  2. Triggers: \dy+

Display Định nghĩa:

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 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 này lệnh fetches và hiển thị định nghĩa của hàm có tên, dưới hình thức của một CREATE OR REPLACE lệnh CHỨC NĂNG.

Nếu + được nối vào tên lệnh, sau đó các dòng sản lượng được đánh số, với dòng đầu tiên của các cơ quan chức năng là dòng 1.

3

Hơi nhiều hơn chỉ hiển thị các chức năng, như thế nào về nhận được cũng chỉnh sửa tại chỗ.

\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 thi nó.

Chỉ \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

Các vấn đề liên quan