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:太棒了