在VIEW中使用IF-ELSE子句

时间:2018-07-20 09:45:41

标签: sql postgresql

我必须对所有用户使用相同的视图,但是我想针对不同的角色返回不同的行。

结构应如下所示:

process.stdout.write

函数test_special_role()返回一个布尔值,对于角色“ Pam”,此布尔值为“ true”,否则为false。函数get_current_uid()返回当前用户的ID(例如:D)。

我也尝试使用“ CASE”代替“ IF”,但这并没有太大帮助。也许我应该在'WHERE'语句中使用'CASE',但是在'true'情况下我会怎么做(WHERE ...什么都没有...)?

数据库:PSQL 10.4

1 个答案:

答案 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"表的访问。