2つのPostgresqlデータベースグループ、「authors」と「editors」、および2人のユーザー、「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が属するロール(できればそれらのoid)のリストを返すパフォーマント関数を作成したいと思います。次のようなものです。
create or replace function get_all_roles() returns oid[] ...
maxwell、authors、editorのoidを返す必要があります(ただし、ernestではありません)。
しかし、継承がある場合にどうすればよいかわかりません。
pg_has_role()
がほとんど問題ではない場合でも、おそらく私の再帰クエリよりも少し速いためです。最後になりますが、スーパーユーザーのすべてのロールを返しますが、これは歓迎すべき副作用である場合とそうでない場合があります。ここで、クエリと結果が異なります。