Postgresql 检查当前_设置()的值
我正在尝试使用Postgresql 检查当前_设置()的值,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我正在尝试使用当前设置() 我想到了这个: CREATE OR REPLACE FUNCTION process_audit() RETURNS TRIGGER AS $audit$ DECLARE user_id integer; BEGIN BEGIN user_id := current_setting('hws.current_user_id'); EXCEPTION WHEN OTHERS THEN
当前设置()
我想到了这个:
CREATE OR REPLACE FUNCTION process_audit() RETURNS TRIGGER AS $audit$
DECLARE
user_id integer;
BEGIN
BEGIN
user_id := current_setting('hws.current_user_id');
EXCEPTION WHEN OTHERS THEN
user_id := NULL;
END;
...
RETURN NULL;
END;
$audit$ LANGUAGE plpgsql;
该设置通过以下方式设置:
SELECT set_config('hws.current_user_id', '5', true); -- true = local setting -> only visible in current transaction
问题是,如果值无效,current\u setting()
将引发异常。我不想使用异常
,因为我知道异常块很昂贵
有没有办法在不使用异常的情况下检查设置是否有值
顺便说一句:我也试着阅读pgu设置
,但这似乎不适用于本地设置。9.6及更新版本:
PostgreSQL(9.6+)支持current\u设置('setting\u name','t')
获取设置,如果未设置,则返回NULL
。您可以将其与合并
组合以提供默认值
9.5及以上:
根据问题,您可以使用
plpgsql
函数执行此操作,该函数使用BEGIN。。。异常
处理程序,如果您不介意性能问题和笨拙的话。但是没有内置的支持。你有没有在这方面获得过什么进展?@toxaq:据我所知,这项功能将适用于9.5版本(尽管它不在alpha2的预发行版中),形式是可选的第二个参数缺少\u ok
:当前设置('foo',true)如果foo
未定义,则不会抛出错误;看见据报道,这个补丁是大卫·克里斯坦森(谢谢!)。@toxaq:Ugh;补丁提交给了主分支,但没有提交给导致9.5版本的分支。因此,除非有人选择9.5版本(不确定这是否会发生?),否则该功能在明年9.6版本之前似乎无法使用-/@奇鲁被掏空了。在将值从应用程序传递到PG方面,它会提供一些非常好的选项。第二个缺失的\u ok
参数在9.6 now FYIf中提供。如果有人想查看完整的示例,我创建了利用设置本地
和当前设置
。希望你觉得它有用:-)@blubb:太棒了