有人知道为什么会这样吗?当我在其他存储过程和文本中尝试时,通常用指定为存储过程参数的值替换。
CREATE OR REPLACE FUNCTION setUserId(userId text)
returns void AS $$
BEGIN
SET session "myapp.userId" = userId;
END
$$ LANGUAGE plpgsql;app=# select * from setUserId('myuserId');
setuserid
-----------
(1 row)
app=# select current_setting('myapp.userId');
current_setting
-----------------
userid
(1 row)
app=#发布于 2021-12-16 21:50:02
根据手册的说法
SET session "myapp.userId" = userId等于
SET session "myapp.userId" = 'userId'因此,输入参数名userId被认为是运行时参数的新值,而不是输入参数值'myuserId‘。
如果希望运行时参数考虑输入参数userId的值“userId”,则需要一个动态语句:
CREATE OR REPLACE FUNCTION setUserId(userIdtext)
returns void AS $$
BEGIN
EXECUTE '
SET session "myapp.userId" = ' || quote_nullable(userId) ;
END
$$ LANGUAGE plpgsql;[医]小提琴中的演示
https://stackoverflow.com/questions/70385819
复制相似问题