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

Cách lấy danh sách tham số hàm (để tôi có thể bỏ một hàm)

Postgres có một chức năng dành riêng cho mục đích đó. Được giới thiệu với Postgres 8.4. Hướng dẫn sử dụng:

pg_get_function_identity_arguments(func_oid) ... lấy danh sách đối số để xác định một hàm (không có giá trị mặc định) ...

pg_get_function_identity_arguments trả về danh sách đối số cần thiết để xác định một hàm, ở dạng nó sẽ cần xuất hiện bên trong ALTER FUNCTION , ví dụ. Biểu mẫu này bỏ qua các giá trị mặc định.

Sử dụng (và format() đó , được giới thiệu với Postgres 9.1), truy vấn sau tạo các câu lệnh DDL để thả các hàm phù hợp với cụm từ tìm kiếm của bạn:

SELECT format('DROP %s %I.%I(%s);'
            , CASE WHEN p.proisagg THEN 'AGGREGATE' ELSE 'FUNCTION' END
            , n.nspname
            , p.proname
            , pg_catalog.pg_get_function_identity_arguments(p.oid)
             ) AS stmt
FROM   pg_catalog.pg_proc p
JOIN   pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE  p.proname = 'dblink'                     -- function name
-- AND n.nspname = 'public'                     -- schema name (optional)
-- AND pg_catalog.pg_function_is_visible(p.oid) -- function visible to user
ORDER  BY 1;

Danh mục hệ thống pg_proc đã thay đổi trong Postgres 11 . proisagg đã được thay thế bởi prokind , các thủ tục được lưu trữ thực sự đã được thêm vào. Bạn cần phải thích nghi. Xem:

  • Làm cách nào để loại bỏ tất cả các chức năng của tôi trong PostgreSQL?

Lợi nhuận:

                  stmt
---------------------------------------------------
 DROP FUNCTION public.dblink(text);
 DROP FUNCTION public.dblink(text, boolean);
 DROP FUNCTION public.dblink(text, text);
 DROP FUNCTION public.dblink(text, text, boolean); 

Tìm thấy bốn kết quả phù hợp trong ví dụ vì dblink sử dụng các hàm quá tải.
Chạy DROP tuyên bố một cách chọn lọc!

Ngoài ra , bạn có thể sử dụng truyền thuận tiện cho loại định danh đối tượng regprocedure trả về một chữ ký hàm hoàn chỉnh bao gồm các loại đối số:

-- SET LOCAL search_path = '';  -- optional, to get all names schema-qualified
SELECT format('DROP %s %s;'
            , CASE WHEN proisagg THEN 'AGGREGATE' ELSE 'FUNCTION' END
            , oid::regprocedure
             ) AS stmt
FROM   pg_catalog.pg_proc
WHERE  proname = 'dblink'   -- function name
ORDER  BY 1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để cài đặt gem hoạt động trên OS X Lion với Ruby 1.8.7 mà không bị lỗi seg?

  2. LỖI PostgreSQL:hàm to_tsvector (ký tự thay đổi, không xác định) không tồn tại

  3. Tổng quan về các phương thức JOIN trong PostgreSQL

  4. Postgresql:Cách tìm tệp pg_hba.conf bằng Mac OS X

  5. Thứ tự kết quả của các mô hình lồng nhau được tải sẵn trong Node Sequelize