database - 如何在 PostgreSQL 中创建复制触发器函数?

标签 database postgresql

我有一张 table

CREATE TABLE order (
  id             SERIAL PRIMARY KEY NOT NULL,
  total_price    DECIMAL(12, 2),
  date           TIMESTAMP WITH TIME ZONE DEFAULT now(),
  product_amount INT
);

还有另一个订单历史表

CREATE TABLE order_history (
  id             SERIAL PRIMARY KEY NOT NULL,
  order_id       INT,
  total_price    DECIMAL(12, 2),
  date           TIMESTAMP WITH TIME ZONE DEFAULT now(),
  product_amount INT  
);

我需要一个用于 ORDER 表的触发器函数,它可以在我将一些数据插入到 ORDER 表或更新数据时触发事件。此外,此过程必须将数据保存到表 ORDER_HISTORY 中。

最佳答案

你在找这样的东西吗?

CREATE OR REPLACE FUNCTION save_order_in_history()
  RETURNS trigger
AS $$
BEGIN
  INSERT INTO order_history(order_id, total_price, product_amount)
  VALUES (NEW.id, NEW.total_price, NEW.product_amount);
  RETURN NULL;
END $$ LANGUAGE plpgsql;

CREATE TRIGGER order_trigger AFTER INSERT OR UPDATE
ON "order" FOR EACH ROW EXECUTE PROCEDURE save_order_in_history();

这是 SQLFiddle 演示

进一步阅读:

关于database - 如何在 PostgreSQL 中创建复制触发器函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26047667/

相关文章:

sql - PostgreSQL:是否可以确定数组中的任何元素是否与范围重叠?

sql - 在 Postgresql 中索引外键

php - Laravel 播种 : date manipulation not working

ios - Swift - 无法从 Firebase 数据库中检索数据

database - 根据特定字段删除重复行

postgresql - Dart 可以有同步 API 吗?

sql - 从 PostgreSQL 中的时间戳中提取日期的最有效方法是什么?

java - 使用java将日期和时间戳插入数据库的最佳方法

postgresql - 如何自定义 Postgres 伪加密函数的输出?

sql - 插入外键时出现语法错误