สมมติว่าฉันมีกลุ่มฐานข้อมูล 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
ฉันต้องการเขียนฟังก์ชั่นนักแสดงที่ส่งกลับรายการของบทบาท (โดยเฉพาะอย่างยิ่ง oid ของพวกเขา) ที่ Maxwell เป็นของบางสิ่งเช่นนี้:
create or replace function get_all_roles() returns oid[] ...
มันควรส่งคืน oids สำหรับ maxwell, ผู้แต่งและบรรณาธิการ
แต่ฉันไม่แน่ใจว่าจะทำอย่างไรเมื่อมีการสืบทอด
pg_has_role()
อาจเป็นเร็วกว่าแบบสอบถามแบบเรียกซ้ำของฉันเล็กน้อยแม้ว่าจะไม่ค่อยสำคัญก็ตาม สิ่งสุดท้ายที่: มันส่งกลับบทบาททั้งหมดสำหรับ supersusers ซึ่งอาจหรือไม่อาจมีผลข้างเคียงต้อนรับ นั่นคือสิ่งที่ผลลัพธ์แตกต่างจากแบบสอบถามของฉัน