所以我采用的方法是在用户表上创建新的布尔列,如果设置为true,则表有数据,如果为false则表为空。现在我被卡住了,因为我不知道如何创建触发器,或者更像是触发器后面的过程。
所以我的逻辑是......每个表都有一个触发器:
CREATE TRIGGER check_sales_trigger
AFTER INSERT OR DELETE
ON sales
FOR EACH ROW
EXECUTE PROCEDURE check_sales_table();
然后,创建一个过程,更新每个表的用户表上的布尔列。所以基本上我需要帮助创建程序。
仅供参考,每个客户都有自己的数据库。
答案 0 :(得分:1)
函数(复数)需要处理a)用户的新订单,b)现有订单的用户ID更改和c)已删除的订单。编写触发器并不难,只需要阅读一些手册即可。没有ifs,没有buts,没有例外。
由于这是你第一次,这里有一个更复杂的例子(因为如果编写不好会导致死锁),为了让你开始:
create function check_sales_table__update() returns trigger as $$
begin
if new.user_id < old.user_id then
update users
set has_sales = true
where id = new.user_id;
update users
set has_sales = exists (select 1 from sales where user_id = old.user_id)
where id = old.user_id;
elsif old.user_id < new.user_id then
update users
set has_sales = exists (select 1 from sales where user_id = old.user_id)
where id = old.user_id;
update users
set has_sales = true
where id = new.user_id;
end if;
return null;
end;
$$ language plpgsql;
(当然,上面假设一个非空字段。)