Giải pháp đầu tiên
Cú pháp cho SET
là:
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
giá trị value
là giá trị mới cho configuration_parameter
nhất định .
Để chỉ định một giá trị được lưu trữ trong _user_id
biến, bạn cần tạo một lệnh động và sau đó EXECUTE
nó.
Đây sẽ là cách để làm điều đó:
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;
$$;
Đính kèm SQL Fiddle liên kết cho mục đích thử nghiệm.
Lưu ý:
-
quote_nullable()
hàm sẽ trả vềNULL
nếu đối số đầu vào là null. Nó có thể không cần thiết trong trường hợp của bạn.
Giải pháp thứ hai
Bạn cũng có thể đạt được điều tương tự với set_config()
chức năng như @a_horse_with_no_name đã lưu ý. Khi đó, hàm của bạn sẽ giống như sau:
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;
$$;
Đính kèm SQL Fiddle liên kết cho mục đích thử nghiệm.
Lưu ý:
- Bạn phải truyền đối số thứ hai một cách rõ ràng sang kiểu varchar
-
PERFORM
được sử dụng để đánh giá một biểu thức và loại bỏ kết quả vì nó không cần thiết - Bạn có thể sử dụng
quote_nullable()
cũng hoạt động ở đây