Postgres会话变量在函数内部不起作用

问题描述

我正在postgres函数中设置会话变量,但未设置值。 任何帮助是最感激的。提前致谢。 我正在使用“ Postgresql 10.6,由Visual C ++内部版本1800编译,64位”

我的代码如下: 功能

CREATE FUNCTION set_rp_vals(iv_rp_company varchar,iv_rp_portfolio varchar)
RETURNS integer
LANGUAGE plpgsql
Security DEFINER
AS $function$

DECLARE

l_retval integer;

BEGIN

    l_retval := 1;

    RAISE NOTICE '1.iv_rp_company: >>> %',iv_rp_company;
    RAISE NOTICE '2.iv_rp_portfolio: >>> %',iv_rp_portfolio;

    --set the session variable
    set rp.company   = iv_rp_company;
    set rp.portfolio = iv_rp_portfolio;

    RETURN l_retval;

    EXCEPTION
        WHEN OTHERS THEN
            RETURN 9;
    END;

$function$
;

函数调用

SELECT set_rp_vals(iv_rp_company := 'COMPAN',iv_rp_portfolio := 'PORTOF');

-检索会话变量:

select 
current_setting('rp.company') as company,current_setting('rp.portfolio') as portfolio;

The value returned by the above query:

解决方法

我将为此使用set_config()函数:

CREATE OR REPLACE FUNCTION set_rp_vals(iv_rp_company varchar,iv_rp_portfolio varchar)
RETURNS integer
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$

DECLARE

l_retval integer;

BEGIN

    l_retval := 1;

    RAISE NOTICE '1.iv_rp_company: >>> %',iv_rp_company;
    RAISE NOTICE '2.iv_rp_portfolio: >>> %',iv_rp_portfolio;

    --set the session variable
    perform set_config('rp.company',iv_rp_company,false);
    perform set_config('rp.portfolio',iv_rp_portfolio,false);

    RETURN l_retval;

    EXCEPTION
        WHEN OTHERS THEN
            RETURN 9;
    END;

$function$
;
CREATE FUNCTION

执行您的值:

SELECT set_rp_vals(iv_rp_company := 'COMPAN',iv_rp_portfolio := 'PORTOF');            

NOTICE:  1.iv_rp_company: >>> COMPAN
NOTICE:  2.iv_rp_portfolio: >>> PORTOF
┌─────────────┐
│ set_rp_vals │
├─────────────┤
│           1 │
└─────────────┘
(1 row)

select                                                                                
current_setting('rp.company') as company,current_setting('rp.portfolio') as portfolio;

┌─────────┬───────────┐
│ company │ portfolio │
├─────────┼───────────┤
│ COMPAN  │ PORTOF    │
└─────────┴───────────┘
(1 row)