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

Trạng thái SQL:42883, Không có hàm nào phù hợp với các kiểu đối số và tên đã cho. Nhưng chức năng đó thực sự tồn tại

Hầu hết có lẽ là vấn đề của lược đồ so với giản đồ search_path . Hàm được tạo trong lược đồ mặc định của người dùng đang tạo. Nếu nó không có trong search_path của người dùng hiện tại, nó không hiển thị.

Chi tiết:

Thông thường, bạn sẽ tạo các hàm công khai trong lược đồ public và có lược đồ đó trong search_path của everbody .

CREATE OR REPLACE FUNCTION public.fun_validatepost(integer, integer)
  RETURNS integer AS
$BODY$
...
$BODY$ LANGUAGE plpgsql;
ALTER FUNCTION public.fun_validatepost(integer, integer) OWNER TO postgres;

Chất lượng giản đồ chỉ cần thiết nếu public vẫn không phải là giản đồ mặc định.

Ngoài ra, GRANT của bạn lệnh không có ý nghĩa. EXECUTE đặc quyền cho các chức năng được cấp cho public theo mặc định. Và khi bạn cấp cho public , không cần phải cấp cho người dùng khác. Đặc biệt không gửi postgres , là OWNER dù sao và cũng là một siêu người dùng. Hướng dẫn:

Bạn cần cấp USAGE trên SCHEMA nơi hàm được tạo. public giản đồ cấp USAGE thành public (mọi người) theo mặc định.

Bên cạnh 1

Truyền tới integer không thay đổi bất cứ điều gì ở đây bởi vì một ký tự số không có dấu thập phân được buộc tự động thành số nguyên. Chi tiết về hằng số trong sách hướng dẫn.

Bên cạnh 2

Xem xét khẩn cấp cập nhật lên phiên bản Postgres hiện tại. Phần mềm của bạn đã hoàn toàn lỗi thời.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng chức năng cửa sổ OVER trong SQLAlchemy

  2. kích hoạt postgresql trên cột tsvector nhận được LỖI:cột không tồn tại

  3. AWS Glue - Cắt ngắn bảng postgres đích trước khi chèn

  4. Trình kích hoạt cập nhật PostgreSQL

  5. Cách xóa điều kiện khỏi mệnh đề WHERE nếu các tham số là NULL