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.
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.
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.