Re: Policy function not working (IN parameter not passed)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2020-05-29 at 08:47 +0000, Rainer Floegel (Suva) wrote:
> create or replace function policy_test.get_partners(text)
>   returns boolean as
> $$
> declare
>  
>   is_true   boolean := FALSE;
>   the_count integer := 0;
>  
> begin
>  
>    select  count(*)
>      into  the_count
>      from  policy_test.partners a
>     where  a.business_partner = '125210000'
>       and  a.business_partner = $1;
>  
>    if the_count = 1 then
>      is_true := TRUE;
>    end if;
>  
>    return is_true;
>  
> end;
> $$ language plpgsql;
> 
> create policy test_partner_policy on policy_test.partners
>   using (policy_test.get_partners(business_partner));
> 
> select * from policy_test.partners;
> 
> Above select throws numerous lines shown underneath; sometimes in between the echoed SQL
> error message max_stack_depth exceeded occurs. Beyond that no other error messages appear. 
> 
> SQL statement "select  count(*)
>                           from  policy_test.partners a
>     where  a.business_partner = '125210000'
>       and  a.business_partner = $1"
> PL/pgSQL function policy_test.get_partners(text) line 9 at SQL statement
> SQL statement "select  count(*)
>                           from  policy_test.partners a
>     where  a.business_partner = '125210000'
>       and  a.business_partner = $1"
> PL/pgSQL function policy_test.get_partners(text) line 9 at SQL statement

What do you expect?

In the function you select from the table, so the policy is applied, which calls
the function, and so on.  Infinite recursion.

I am quite uncertain what your policy is supposed to achieve, but you should not
SELECT from the same table in the function.

Yours,
Laurenz Albe
-- 
Cybertec | https://www.cybertec-postgresql.com






[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux