Function 如何在postgresql中为自定义_variable_类指定变量值或函数参数
我使用的pl/pgsql函数使用了Function 如何在postgresql中为自定义_variable_类指定变量值或函数参数,function,postgresql,session-variables,plpgsql,Function,Postgresql,Session Variables,Plpgsql,我使用的pl/pgsql函数使用了自定义变量类,函数代码为 CREATE OR REPLACE FUNCTION can_connect("pUserId" character varying) RETURNS boolean AS $BODY$DECLARE user_id integer ; BEGIN SELECT users.user_serial INTO user_id FROM public.users WHERE users.user_id="pUserId" ; set p
自定义变量类
,函数代码为
CREATE OR REPLACE FUNCTION can_connect("pUserId" character varying)
RETURNS boolean AS
$BODY$DECLARE
user_id integer ;
BEGIN
SELECT users.user_serial INTO user_id
FROM public.users
WHERE users.user_id="pUserId"
;
set public.userId to user_id ;
set public.companyId to "pUserId" ;
RETURN true ;
EXCEPTION
WHEN OTHERS THEN
raise notice ' error %',sqlerrm ;
END ;
$BODY$
LANGUAGE plpgsql VOLATILE
现在使用函数
select can_connect ('amr' );
t
正常,返回值为t
,与预期一致
但在尝试检索会话变量值时
select current_setting('public.userId') ;
the result is
user_id
哪个是变量名而不是值
使用函数参数时也是如此
select current_setting('public.pUserId') ;
the result is
pUserId
谢谢。这样只允许PostgreSQL的配置参数
在PostgreSQL 9.1上,我有以下输出:
将用户id设置为bbb;
错误:无法识别的配置参数“用户id”
由于PostgreSQL没有包,保持状态的最佳方法是使用。这样只允许使用PostgreSQL的配置参数
在PostgreSQL 9.1上,我有以下输出:
将用户id设置为bbb;
错误:无法识别的配置参数“用户id”
由于PostgreSQL没有包,保持状态的最佳方法是使用。使用plpgsql强制解析器插入变量值:
EXECUTE 'set public.userId to ' || quote_literal(user_id);
EXECUTE 'set public.companyId to ' || quote_literal( "pUserId");
作为奖励,它还可以与较旧版本的PostgreSQL一起使用。使用plpgsql强制解析器插入变量值:
EXECUTE 'set public.userId to ' || quote_literal(user_id);
EXECUTE 'set public.companyId to ' || quote_literal( "pUserId");
作为奖励,它还可以与较旧版本的PostgreSQL配合使用。代码使用。它假设postgresql.conf包含一行,如
custom\u variable\u classes='public'
感谢vyegorov的快速响应我已经在代码使用的配置文件中设置了custom\u variable\u classes。它假设postgresql.conf包含一行内容,如custom\u variable\u classes='public'
感谢vyegorov的快速响应我已经在配置文件中设置了custom\u variable\u classes。不客气。如果答案完全满足问题,请点击复选标记(阅读“如何/为什么”)接受答案。如果答案完全满足问题,请点击复选标记接受(阅读了解如何/为什么)