如何组合双条件编写resource_authors表的INSERT策略SQL表达式?
PostgreSQL INSERT策略:组合多条件实现资源作者关联表的插入控制
你可以直接用AND运算符把两个条件组合成一个布尔表达式,填入WITH CHECK子句中。这里提供两种写法,其中第二种性能更优:
写法一(基于COUNT统计)
CREATE POLICY insert_resources_authors ON public.resource_authors FOR INSERT TO public_user WITH CHECK ( current_user_id() IS NOT NULL AND (SELECT count(user_id) = 0 FROM resource_authors WHERE resource_id = NEW.resource_id) );
写法二(基于NOT EXISTS推荐)
用NOT EXISTS替代COUNT会更高效,因为它找到匹配的记录后就会停止查询,不需要统计所有行:
CREATE POLICY insert_resources_authors ON public.resource_authors FOR INSERT TO public_user WITH CHECK ( current_user_id() IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM resource_authors WHERE resource_id = NEW.resource_id ) );
条件说明
current_user_id() IS NOT NULL:确保执行插入操作的用户已登录,通过你的自定义函数验证登录状态NOT EXISTS (...)/COUNT(...) = 0:验证待插入的资源ID在resource_authors表中还没有对应的作者记录,避免重复添加
内容的提问来源于stack exchange,提问作者machineghost
相关产品推荐
相关产品推荐

