我已经在我的测试表中添加了行级安全性。如果我在函数内部设置会话变量“my.user_id”=“1”,则RLS正常工作。不幸的是,如果我设置会话变量等于函数的某些参数,RLS策略看不到它。有没有人能告诉我,有没有可能为RLS等于函数的参数设置变量?
CREATE OR REPLACE FUNCTION sbx.get_expenses_by_ppp_table_2(v_user_id character varying,day character varying)
RETURNS TABLE(report_id integer, report_row_id character varying, report_row_name character varying, row_level_num integer, fact_amount numeric, plan_amount numeric, execution_percentage numeric, daily_fact_amount numeric)
LANGUAGE plpgsql
AS $function$
#variable_conflict use_column
declare
report_day date;
report_year int4;
begin
report_day := day::date;
report_year := date_part('year', report_day);
set "my.user_id" = v_user_id;
return query select 1 as report_id,
ex.ppp_code as report_row_id,
...............
........
...
我试过很多方法设置变量等于参数,没有一个是我想要的。
1条答案
按热度按时间rbl8hiat1#
如果你
将占位符参数设置为文字值
'v_user_id'
。你可以通过调用
set_config()
函数来实现你想要的: