create table user_table(
idx text,
_section text[]
);
create table section_table(
_section text,
sub_section text[]
);
alter table user_table enable row level security;
create policy user_p on user_table for select
using (section @>
(select _section from user_table
intersect
(select _section::text[]
from section_table
where current_setting('my.sub_section',true)::text[]
<@ (select sub_section
from section_table)
)
)
);
insert into user_table values
(1,'{"section1"}'),(2,'{"section2"}'),
(2,'{"section2","section1"}');
insert into section_table values
('section1','{"s","b"}'),
('section2','{"c","d"}');
ожидаемый результат:
set my.sub_section ='{"c"}';
select * from user_table;
должен отображать только (2,'{"section2"}')
, но он показывает все.
Когда введено sub_section
, оно должно перейти к section_table
и найти соответствующий раздел и пересечь с user_table
, если значение пересечения не является нулевым, то должно вернуть соответствующее значение user_table
.
Я смущен, почему он не показывает правильный ожидаемый результат.