(欢迎提出更好或更具描述性的标题的建议)。
我想知道在 PostgreSQL 中是否可以使用 RLS(或任何其他机制)进行以下操作。如果用户名与另一个表中的列匹配,我希望用户能够更新表的某些行。在下面的示例中,我希望在 tablenene
中显示为 column的 user能够更新 column 和table 。我要表达的是对 t2 中将由以下 select 语句匹配的行应用策略: u
t0
a
p
t2
SELECT a, p FROM t2 INNER JOIN t1 ON (t2.t1id = t1.id) INNER JOIN t0 ON (t1.t0id = t0.id) WHERE t0.u = 'nene';
这可能吗?关于如何进行的任何建议?一个明显的解决方法是在表 t2 上复制用户名,但这会在 t2 上添加无关信息,并且需要强制执行额外的约束。
这是我的三个表(实际情况下字段更多,表 t1 不能排除在问题之外;我将它留在示例中,因为需要两个连接可能会改变解决方案空间)。
表
t0
是用创建的CREATE TABLE t0 (id TEXT PRIMARY KEY, u TEXT UNIQUE, pn TEXT);
,现在包含:=> SELECT * FROM t0; id | u | pn ------+------+------ b321 | toto | fifi a421 | nene | xuxu (2 rows)
表
t1
是用创建的CREATE TABLE t1 (id TEXT PRIMARY KEY, t0id TEXT REFERENCES t0(id), pn TEXT);
,现在包含:=> SELECT * FROM t1; id | t0id | pn ------+------+------ x99 | a421 | lala zy49 | a421 | popo l2l | b321 | nipa (3 rows)
表
t2
是用创建的CREATE TABLE t2 (id TEXT, t1id TEXT REFERENCES t1(id), a INET, p INT);
,现在包含=> SELECT * FROM t2; id | t1id | a | p ------+------+-------------+------- 1264 | x99 | | 1267 | zy49 | | 1842 | l2l | 192.0.200.3 | 31337 1234 | x99 | 10.0.0.89 | 23 (4 rows)