Katakanlah saya memiliki dua grup basis data Postgresql, "penulis" dan "editor", dan dua pengguna, "maxwell" dan "ernest".
create role authors;
create role editors;
create user maxwell;
create user ernest;
grant authors to editors; --editors can do what authors can do
grant editors to maxwell; --maxwell is an editor
grant authors to ernest; --ernest is an author
Saya ingin menulis fungsi pemain yang mengembalikan daftar peran (terutama milik mereka) yang dimiliki maxwell, kira-kira seperti ini:
create or replace function get_all_roles() returns oid[] ...
Ini harus mengembalikan oids untuk maxwell, penulis, dan editor (tetapi tidak ernest).
Tetapi saya tidak yakin bagaimana melakukannya ketika ada warisan.
pg_has_role()
mungkin sedikit lebih cepat daripada permintaan rekursif saya, bahkan jika itu tidak masalah. Namun satu hal lagi: ia mengembalikan semua peran untuk supersusers, yang mungkin atau mungkin bukan efek samping yang diterima. Di situlah hasilnya berbeda dari kueri saya.