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.