Скажімо, у мене є дві групи баз даних Postgresql, "автори" та "редактори", і два користувачі, "maxwell" та "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
Я хотів би написати функцію виконавця, яка повертає список ролей (бажано, їх оїдів), до яких належить maxwell, приблизно так:
create or replace function get_all_roles() returns oid[] ...
Він повинен повернути вислови для максвелл, авторів та редакторів (але не помилково).
Але я не впевнений, як це зробити, коли є спадщина.
pg_has_role()
це, мабуть, трохи швидше мого рекурсивного запиту, навіть якщо це навряд чи має значення. І останнє, що все-таки: воно повертає всі ролі для суперкористувачів, що може бути, а може і не бути бажаним побічним ефектом. Ось де результат відрізняється від мого запиту.