插入行时更新不同的表

时间:2017-11-24 09:33:29

标签: postgresql

我正在开发一个市场平台,我将用户余额存储为余额变化表,以及用户行中预先计算的值。这使我可以轻松检查其余额,但仍会按特定时间间隔重新计算,以确保它们保持同步。

以下是余额更改表的示例:

| id | opening_balance | closing_balance | user_id |
|----|-----------------|-----------------|---------|
| 1  | 23.40           | 28.20           | 6       |
| 2  | 14.70           | 11.10           | 79      |
| 3  | 117.12          | 107.12          | 20      |

插入新行后,我想更新balance与新插入的user_id关系的closing_balance列。

从我在网上找到的内容来看,我得到的是以下内容,而不是Postgresql。

CREATE TRIGGER balance_update
AFTER INSERT ON balance_history
FOR EACH ROW 
BEGIN
  UPDATE users 
     SET balance = NEW.closing_balance
   WHERE id = NEW.user_id;
END;

看起来Postgresql要求您在创建触发器之前创建命名过程?不确定转换它的最佳方法。

1 个答案:

答案 0 :(得分:1)

Postgres中的触发器具有比MySQL更复杂的语法,因为它们将执行过程作为操作。在这种情况下,我们可以定义一个函数,该函数将在第一个表上插入时执行所需的更新。

CREATE OR REPLACE FUNCTION your_proc()
RETURNS trigger AS
$$
BEGIN
    UPDATE users 
    SET balance = NEW.closing_balance
    WHERE id = NEW.user_id;
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';

CREATE TRIGGER balance_update
AFTER INSERT ON balance_history
FOR EACH ROW 
EXECUTE PROCEDURE your_proc();