ध्यान दें कि पोस्टग्रेज फंक्शन ओवरलोडिंग की अनुमति देता है , इसलिए न केवल फ़ंक्शन NAME को मौजूद होने की आवश्यकता है, बल्कि फ़ंक्शन पैरामीटर के प्रकारों का उपयोग यह निर्धारित करने के लिए भी किया जाएगा कि किस अधिभार का उपयोग करना है, उदा.
CREATE OR REPLACE FUNCTION public.get_user_by_username(varchar, varchar, boolean)
. के समान कार्य नहीं है
CREATE OR REPLACE FUNCTION public.get_user_by_username(varchar, boolean, varchar)
आदि
इन फ़ंक्शंस को कॉल करते समय, पैरामीटर नाम, प्रकार और संभावित ऑर्डर सभी मेल खाने चाहिए, अन्यथा आपको
. मिलेगा
एक अतिरिक्त गोचा जो मुझे काटता रहता है, वह है कार्यों को परिभाषित करते समय पोस्टग्रेसक्ल का केस-सेंसिटिविटी नियम। उदाहरण के लिए, बिना किसी आसपास के ""
उद्धरण, निम्नलिखित फ़ंक्शन परिभाषा (pgAdmin 3 में डिफ़ॉल्ट सेटिंग्स का उपयोग करके):
CREATE FUNCTION MySchema.MyFunction(Parameter1 VARCHAR(40), parameTer2 VARCHAR(20))
हस्ताक्षर के साथ फ़ंक्शन को पंजीकृत करता है:(इसे सत्यापित करने के लिए एक IDE टूल का उपयोग करें)
myschema.myfunction(parameter1 VARCHAR(40), parameter2 VARCHAR(20))
परिणामस्वरूप, C# में
. से आबद्ध होने का कोई भी प्रयासcommand.Parameters.Add("Parameter1", NpgsqlDbType.Varchar, 40);
command.Parameters.Add("parameTer2", NpgsqlDbType.Varchar, 20);
त्रुटि के साथ विफल हो जाएगा। इसके बजाय, आपको ऑल-लोअर-केस पैरामीटर, यानी
. के विरुद्ध बाध्य होना होगाcommand.Parameters.Add("parameter1", NpgsqlDbType.Varchar, 40);
command.Parameters.Add("parameter2", NpgsqlDbType.Varchar, 20);
जब तक आप फ़ंक्शन को उद्धरणों के साथ परिभाषित नहीं करते:
CREATE FUNCTION "MySchema"."MyFunction"("Parameter1" VARCHAR(40), "parameTer2" VARCHAR(20))
इसलिए आपके लिए यह महत्वपूर्ण है कि आप अपने डेटाबेस/संगठन में केसिंग कन्वेंशन पर सहमत हों, और फिर उससे चिपके रहें (सभी लोअरकेस काफी सामान्य है)
एक विकल्प, हालांकि नाजुक होने की संभावना भी है, नामित मापदंडों के साथ बिल्कुल भी नहीं बांधना है, और इसके बजाय पैरामीटर की क्रमिक स्थिति का उपयोग करना है, उदा।
var myParameter = new NpgsqlParameter
{
// Leave `ParameterName` out entirely,
Direction = ParameterDirection.Input,
IsNullable = false,
NpgsqlDbType = NpgsqlDbType.Varchar,
Size = 20,
Value = "SomeValue"
};
command.Parameters.Add(myParameter);
// Same for other parameter(s)