相关疑难解决方法(0)

使用current_setting()检查值

我正在努力工作current_setting().

我想出了这个:

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;
Run Code Online (Sandbox Code Playgroud)

设置通过以下方式设置:

SELECT set_config('hws.current_user_id', '5', true); -- true = local setting -> only visible in current transaction
Run Code Online (Sandbox Code Playgroud)

问题是,current_setting()如果值无效,则抛出异常.我不想使用,EXCEPTION因为我读到异常块很昂贵.

有没有办法检查设置是否有值而不使用异常?

顺便说一句:我也尝试过阅读,pg_settings但这似乎不适用于本地设置.

postgresql postgresql-9.2

19
推荐指数
1
解决办法
7418
查看次数

Postgresql存储过程中基于会话的全局变量?

在Oracle的PL/SQL中,我可以使用包定义创建基于会话的全局变量.使用Postgresql的PLpg/SQL,它似乎不可能,因为没有包,只有独立的程序和功能.

以下是PL/SQL将g_spool_key声明为全局的语法...

CREATE OR REPLACE PACKAGE tox IS
        g_spool_key spool.key%TYPE := NULL;
        TYPE t_spool IS REF CURSOR RETURN spool%ROWTYPE;
        PROCEDURE begin_spool;
        PROCEDURE into_spool
            (
            in_txt IN spool.txt%TYPE
            );
        PROCEDURE reset_spool;
        FUNCTION end_spool
            RETURN t_spool;
        FUNCTION timestamp
            RETURN VARCHAR2;
    END tox;
Run Code Online (Sandbox Code Playgroud)

如何使用PLpg/SQL实现基于会话的全局变量?

oracle postgresql plsql plpgsql

9
推荐指数
3
解决办法
9878
查看次数

标签 统计

postgresql ×2

oracle ×1

plpgsql ×1

plsql ×1

postgresql-9.2 ×1