Function 如何在postgresql中为自定义_variable_类指定变量值或函数参数

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

我使用的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 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。不客气。如果答案完全满足问题,请点击复选标记(阅读“如何/为什么”)接受答案。如果答案完全满足问题,请点击复选标记接受(阅读了解如何/为什么)