如何检查用户是否在某些表中有数据

时间:2013-12-16 21:25:23

标签: postgresql stored-procedures triggers

所以我采用的方法是在用户表上创建新的布尔列,如果设置为true,则表有数据,如果为false则表为空。现在我被卡住了,因为我不知道如何创建触发器,或者更像是触发器后面的过程。

所以我的逻辑是......每个表都有一个触发器:

CREATE TRIGGER check_sales_trigger
  AFTER INSERT OR DELETE
  ON sales
  FOR EACH ROW
  EXECUTE PROCEDURE check_sales_table();

然后,创建一个过程,更新每个表的用户表上的布尔列。所以基本上我需要帮助创建程序。

仅供参考,每个客户都有自己的数据库。

1 个答案:

答案 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;

(当然,上面假设一个非空字段。)