शायद स्कीमा बनाम स्कीमा का मामला search_path . फ़ंक्शन बनाने वाले उपयोगकर्ता के डिफ़ॉल्ट स्कीमा में बनाया गया है। अगर वह search_path . में नहीं है वर्तमान उपयोगकर्ता का, यह दृश्यमान नहीं है।
विवरण:
आमतौर पर, आप स्कीमा public . में सार्वजनिक फ़ंक्शन बनाएँगे और उस स्कीमा को हर किसी के search_path . में रखें ।
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;
स्कीमा-योग्यता केवल तभी आवश्यक है जब public वैसे भी डिफ़ॉल्ट स्कीमा नहीं है।
साथ ही, आपका GRANT आदेशों का कोई मतलब नहीं है। EXECUTE कार्यों के लिए विशेषाधिकार public . को दिया जाता है डिफ़ॉल्ट रूप से। और एक बार जब आप public . को अनुदान देते हैं , अन्य उपयोगकर्ताओं को अनुदान देने की कोई आवश्यकता नहीं है। विशेष रूप से नहीं postgres , जो OWNER है वैसे भी और एक सुपरयुसर भी। मैनुअल:
आपको USAGE grant प्रदान करने की आवश्यकता है SCHEMA . पर जहां फ़ंक्शन बनाया गया है। public स्कीमा अनुदान USAGE करने के लिए public (सभी) डिफ़ॉल्ट रूप से।
integer में कास्ट किया जा रहा है यहां कुछ भी नहीं बदलता है क्योंकि दशमलव बिंदु के बिना एक संख्यात्मक अक्षर स्वचालित रूप से पूर्णांक के लिए मजबूर हो जाता है। मैनुअल में स्थिरांक के बारे में विवरण।