Giả sử tôi có hai nhóm cơ sở dữ liệu Postgresql, "tác giả" và "biên tập viên" và hai người dùng, "maxwell" và "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
Tôi muốn viết một hàm biểu diễn trả về một danh sách các vai trò (tốt nhất là oid của chúng) mà maxwell thuộc về, đại loại như thế này:
create or replace function get_all_roles() returns oid[] ...
Nó sẽ trả về các oids cho maxwell, tác giả và biên tập viên (nhưng không phải là ernest).
Nhưng tôi không chắc làm thế nào để làm điều đó khi có sự kế thừa.
pg_has_role()
có lẽ nhanh hơn một chút so với truy vấn đệ quy của tôi, ngay cả khi điều đó hầu như không quan trọng. Một điều cuối cùng: nó trả về tất cả các vai trò cho các supersers, có thể hoặc không thể là một tác dụng phụ đáng hoan nghênh. Đó là nơi kết quả khác với truy vấn của tôi.