嗨,我和Postgres一起工作,我有一个角色"my_role",我只想从一个表中更新记录,其中我的corporate_id与其他表相关。
我想要创建一个Policy表,并且我的公司表中有一个corporate_id来驱动以获取这些信息,如下所示:
SELECT * FROM person p
INNER JOIN person_brand a ON p.person_id=a.person_id
INNER JOIN brand b ON a.brand_id=b.brand_id
INNER JOIN corporate c on b.corporate_id=c.corporate_id
WHERE c.corporate_id=corporate_id我的政策是这样的:
ALTER TABLE core.person ENABLE ROW LEVEL SECURITY;
CREATE POLICY person_corporation_all
ON person
AS PERMISSIVE
FOR UPDATE
TO "my_role"
USING (EXISTS(SELECT 1 FROM person p
INNER JOIN person_brand a ON p.person_id=a.person_id
INNER JOIN brand b ON a.brand_id=b.brand_id
INNER JOIN corporate c on b.corporate_id=c.corporate_id
WHERE c.corporate_id=corporate_id)); 但是让我看看这个错误:
ERROR: column reference "corporate_id" is ambiguous
SQL state: 42702我需要将什么作为变量发送到查询中?
问候
发布于 2022-04-22 00:49:21
您将有一个嵌套的策略,因为在验证中您再次拥有了person表,您需要删除它,并引用使用表person名称的列,例如:
CREATE POLICY person_corporation_all
ON person
AS PERMISSIVE
FOR UPDATE
TO "my_role"
USING (EXISTS(SELECT 1 FROM person_brand a
INNER JOIN brand b ON a.brand_id=b.brand_id
INNER JOIN corporate c on b.corporate_id=c.corporate_id
WHERE a.person_id=person.person_id and c.corporate_id=person.corporate_id));https://stackoverflow.com/questions/71961897
复制相似问题