hi @ll,
my table:
test=*# \d rls_test
Table "public.rls_test"
Column | Type | Modifiers
--------+---------+-----------
id | integer |
name | text |
txt | text |
Indexes:
"idx_name" btree (name)
Policies:
POLICY "my_policy" FOR ALL
USING (name = ("current_user"())::text)
test=*# commit;
COMMIT
Time: 0,581 ms
test=# \c - name_66;
You are now connected to database "test" as user "name_66".
test=> explain select * from rls_test ;
QUERY PLAN
-------------------------------------------------------------
Seq Scan on rls_test (cost=0.00..630.00 rows=91 width=335)
Filter: (name = ("current_user"())::text)
(2 rows)
Time: 1,531 ms
test=*> set enable_Seqscan to off;
SET
Time: 0,073 ms
test=*> explain select * from rls_test ;
QUERY PLAN
-------------------------------------------------------------------------------
Seq Scan on rls_test (cost=10000000000.00..10000000630.00 rows=91
width=335)
Filter: (name = ("current_user"())::text)
(2 rows)
As you can see, the index isn't in use, but i think, in this case PG
should use it.
I can expand the where with a where, so PG is using the index:
test=*> explain select * from rls_test where name = current_user;
QUERY PLAN
------------------------------------------------------------------------
Bitmap Heap Scan on rls_test (cost=4.97..232.90 rows=1 width=335)
Recheck Cond: (name = ("current_user"())::text)
Filter: (name = ("current_user"())::text)
-> Bitmap Index Scan on idx_name (cost=0.00..4.97 rows=91 width=0)
Index Cond: (name = ("current_user"())::text)
(5 rows)
USING in a policy isn't using the avalable index.
Bug or Feature?
Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°