यह डिजाइन द्वारा है। मैनुअल अध्याय परिवर्तनीय प्रतिस्थापन . में व्याख्या करता है :
<ब्लॉकक्वॉट>
परिवर्तनीय प्रतिस्थापन वर्तमान में केवल SELECT . में काम करता है , INSERT , UPDATE ,और DELETE कमांड, क्योंकि मुख्य SQL इंजन केवल इन कमांड में क्वेरीपैरामीटर की अनुमति देता है। गैर-स्थिर नाम या अन्य कथन प्रकारों में मान का उपयोग करने के लिए (आमतौर पर उपयोगिता विवरण कहा जाता है), आपको एक स्ट्रिंग के रूप में उपयोगिता विवरण का निर्माण करना होगा और EXECUTE यह।
आप नहीं EXECUTE . के साथ डायनामिक स्टेटमेंट में मान को पैरामीटराइज़ करें या तो इसलिए कि, अध्याय को उद्धृत करते हुए डायनामिक कमांड निष्पादित करना :
पैरामीटर प्रतीकों पर एक और प्रतिबंध यह है कि वे केवल SELECT . में काम करते हैं , INSERT , UPDATE , और DELETE आदेश। अन्य प्रकार के कथनों में (जिन्हें सामान्यतया यूटिलिटी स्टेटमेंट कहा जाता है), आपको टेक्स्ट के रूप में मूल्यों को सम्मिलित करना चाहिए, भले ही वे केवल डेटा मान हों।
एकमात्र विकल्प एक plpgsql फ़ंक्शन में मान को कमांड स्ट्रिंग में जोड़ना है। आप format() . का उपयोग कर सकते हैं , लेकिन सरल उदाहरण के लिए, सादा संयोजन सुरक्षित और आसान है::
CREATE OR REPLACE FUNCTION pg_temp.setdistinct(_cnt real)
RETURNS void
LANGUAGE plpgsql AS
$$
BEGIN
EXECUTE 'ALTER TABLE _temp ALTER COLUMN id SET (n_distinct=' || _cnt || ')';
END
$$;
स्कीमा-योग्यता pg_temp. प्रश्न को प्रतिबिंबित करते हुए इसे एक (अनियंत्रित!) "अस्थायी" कार्य बनाता है।
n_distinct के बारे में मैनुअल ।