पहला समाधान
SET
. के लिए सिंटैक्स है:
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
जहां value
किसी दिए गए configuration_parameter
. के लिए नया मान है ।
_user_id
. में संग्रहीत मान निर्दिष्ट करने के लिए चर, आपको एक गतिशील कमांड उत्पन्न करने की आवश्यकता है और फिर EXECUTE
यह।
ऐसा करने का यह तरीका होगा:
CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true)
RETURNS void
LANGUAGE PLPGSQL
AS $$
BEGIN
EXECUTE 'SET my.user_id TO ' || quote_nullable(_user_id);
END;
$$;
SQL Fiddle अटैच किया जा रहा है परीक्षण उद्देश्यों के लिए लिंक।
नोट:
quote_nullable()
फ़ंक्शनNULL
लौटाएगा यदि इनपुट तर्क शून्य है। आपके मामले में यह आवश्यक नहीं हो सकता है।
दूसरा समाधान
आप set_config()
@a_horse_with_no_name के रूप में कार्य करें। तब आपका कार्य इस तरह दिखेगा:
CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true)
RETURNS void
LANGUAGE PLPGSQL
AS $$
BEGIN
PERFORM set_config('my.user_id', _user_id::TEXT, false);
END;
$$;
SQL Fiddle अटैच किया जा रहा है परीक्षण उद्देश्यों के लिए लिंक।
नोट:
- आपको एक वर्चर प्रकार के लिए स्पष्ट रूप से दूसरा तर्क डालना होगा
PERFORM
किसी व्यंजक का मूल्यांकन करने और परिणाम को त्यागने के लिए प्रयोग किया जाता है क्योंकि इसकी आवश्यकता नहीं है- आप उपयोग कर सकते हैं
quote_nullable()
यहां भी काम करें