0
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、交差の値が null でなくなると、対応する の値を返す必要があります user_table

なぜ正しい期待結果が表示されないのか混乱しています。

4

0 に答える 0