我必须对所有用户使用相同的视图,但是我想针对不同的角色返回不同的行。
结构应如下所示:
process.stdout.write
函数test_special_role()返回一个布尔值,对于角色“ Pam”,此布尔值为“ true”,否则为false。函数get_current_uid()返回当前用户的ID(例如:D)。
我也尝试使用“ CASE”代替“ IF”,但这并没有太大帮助。也许我应该在'WHERE'语句中使用'CASE',但是在'true'情况下我会怎么做(WHERE ...什么都没有...)?
数据库:PSQL 10.4
答案 0 :(得分:1)
SQL中没有IF
,但是您可以使用条件WHERE子句:
CREATE VIEW view_grades AS
SELECT *
FROM "Grades"
WHERE (test_special_role() OR uid=get_current_uid());
但是更好的解决方案是使用row level security来限制对"Grades"
表的访问。