Kemungkinan besar masalah skema vs. skema search_path . Fungsi dibuat dalam skema default dari pengguna yang membuat. Jika itu tidak ada di search_path dari pengguna saat ini, itu tidak terlihat.
Detail:
Biasanya, Anda akan membuat fungsi publik dalam skema public dan memiliki skema itu di search_path ever semua orang .
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;
Kualifikasi skema hanya diperlukan jika public bukan skema default.
Juga, GRANT . Anda perintah tidak masuk akal. EXECUTE hak istimewa untuk fungsi diberikan kepada public secara default. Dan setelah Anda memberikan ke public , tidak perlu memberikan kepada pengguna lain. Terutama untuk tidak postgres , yang merupakan OWNER lagi pula dan pengguna super juga. Manual:
Anda perlu memberikan USAGE pada SCHEMA dimana fungsi tersebut dibuat. public skema memberikan USAGE ke public (semua orang) secara default.
Transmisi ke integer tidak mengubah apa pun di sini karena literal numerik tanpa titik desimal dipaksa menjadi integer secara otomatis. Detail tentang konstanta dalam manual.