PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Nhận tất cả các chức năng do người dùng xác định theo thủ tục

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - chuyển đổi một bảng trong cây JSON được nhóm lại

  2. Django JSONField

  3. Sử dụng loại điểm với PostgreSQL và JPA / Hibernate

  4. Knex.js - Làm thế nào để tạo chỉ mục duy nhất với mệnh đề 'where'?

  5. Số lượng SQL có điều kiện