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.