Cân nhắc:
select
pp.proname,
pl.lanname,
pn.nspname,
pg_get_functiondef(pp.oid)
from pg_proc pp
inner join pg_namespace pn on (pp.pronamespace = pn.oid)
inner join pg_language pl on (pp.prolang = pl.oid)
where pl.lanname NOT IN ('c','internal')
and pn.nspname NOT LIKE 'pg_%'
and pn.nspname <> 'information_schema';
Xem thêm: Lệnh tìm tập lệnh của một hàm hiện có trong postgresql là gì?
Sử dụng pg_get_functiondef
hoặc prosrc
cột từ pg_proc
trực tiếp. Ý tưởng chính là tham gia trên pg_namespace
và lọc ra các hàm danh mục PostgreSQL, có thể sẽ phù hợp cho hầu hết các mục đích:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Sự cố khi lấy mã nguồn cho người dùng xác định các chức năng đang quyết định những gì người dùng có nghĩa. Nhiều loại hàm có thể được tạo:
- Các chức năng sử dụng
CREATE EXTENSION
. - Các hàm được tạo bởi PostgreSQL.
- Các hàm do quản trị viên biên soạn và cài đặt.
Người quản lý cấp cao được cấp đủ quyền có thể xác định các chức năng trong pg_proc
, nhưng thường thì không.
Vì chỉ những người siêu cấp mới có thể tạo các hàm ngôn ngữ C, hãy loại trừ chúng. Những chức năng như vậy có thể được quản trị viên cài đặt tùy chỉnh trên một cơ sở dữ liệu cụ thể, nhưng không phải người dùng bình thường.