我已经能够成功使用dense_rank() over (order by...)
在postgres的行级安全策略条件下,哪个AFAIK是窗口功能-
但是,documentation声明
任何SQL条件表达式(返回布尔值)。 条件表达式不能包含任何聚合或窗口函数
(重点是我的)。
有人可以解释此限制并举例说明它的适用范围吗?
谢谢。
答案 0 :(得分:1)
基本上,它告诉您每行在行级安全性方面都是独立的。
请考虑下表:
+---------------------+----------------+
| field1 | field2 |
+---------------------+----------------+
| value1 | 1 |
| value1 | 2 |
| value1 | 3 |
| value2 | 4 |
+---------------------+----------------+
有几种(宽松的)政策:
field1 = 'value1'
field1 = 'value2'
您被授予策略2和3,因此您只能查看和更新最后一条记录。
...,直到执行UPDATE table SET value2 = 11
。
这真的很糟糕:
有趣的是,您可以将策略定义为MyField IN (SELECT MyOtherField FROM MyOtherTable)
,在这种情况下,所有策略都取决于您在MyOtherTable
上定义的内容(打算与FK / PK一起使用)。