所以我有一个非常好的函数来更新产品的浏览量:
UPDATE products SET view=view+1 WHERE id=@id RETURNING *
问题是,我目前正在将我的用户切换为只读,以增加更多的安全性。不幸的是,由于这个函数更新了视图的数量,所以这是不可能的,因为它是一个更新操作。
所以我想知道psql是否允许我创建一个触发器函数,在每次查询数据时更新列值?我查看了官方文档,但没有注意到任何与我的用例相关的示例。
可能是这样的(伪代码):
CREATE TRIGGER view_increment
AFTER SELECT ON products WHERE id=@id
EXECUTE SET view=view+1;
2条答案
按热度按时间neekobn81#
我唯一能想到的就是创建一个
security definer
作为对数据库具有写入权限的用户。然后使用函数代替表:然后他们就这样使用它:
如果要允许查看多个产品,可以将函数更改为
returns setof product
ct2axkht2#
我唯一能想到的就是
SELECT
在products
通过函数操作:并让product\u item()执行
UPDATE
,其中product\u item()将SECURITY DEFINER
设置为可以作为特权用户运行。