简体   繁体   English

创建用于在 postgres 中计算总和的触发器

[英]Create triggers for calculating sum in postgres

I have this tables in postgres我在 postgres 中有这个表

CREATE TABLE voting_option (
  id SERIAL PRIMARY KEY,
  -- SUM of all vote values for this voting option id
  votes_value INT NOT NULL DEFAULT 0
);
CREATE TABLE vote (
  id SERIAL PRIMARY KEY,
  voting_option_id INT NOT NULL,
  -- can be positive/negative or 0
  value INT NOT NULL
);

I want to create triggers that will automatically update votes_value every time I INSERT / UPDATE / DELETE a record to the vote table.我想创建触发器,每次我将记录INSERT / UPDATE / DELETEvote表时,它都会自动更新votes_value

Something like this:是这样的:

For INSERT: votes_value += vote.value对于插入: votes_value += vote.value

For DELETE: votes_value -= vote.value对于删除: votes_value -= vote.value

For UPDATE: votes_value = votes_value - old vote.value + new vote.value对于更新: votes_value = votes_value - old vote.value + new vote.value

As @JimJones noticed, all you need is this simple view.正如@JimJones 所注意到的,您所需要的只是这个简单的视图。 You will have clean insert-only workflow as a bonus too instead of an update workflow in disguise.您还将拥有干净的仅插入工作流作为奖励,而不是伪装的更新工作流。

create view voting_option_v as
 select voting_option_id id, sum(value) votes_value
 from vote 
 group by voting_option_id;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM