需要有关Postgres触发器和功能的帮助

我有一个查找表,其中包含一列源(来自我创建的Web服务API捕获的各种硬编码广告)以及应与之关联的各个品牌.这样我就可以为品牌为空的记录提供一个品牌 – 这样他们就可以通过营销自动化工具通过某个模板进行欢迎.

我最终弃用了这个API并将其替换为需要品牌的API,但与此同时我必须制定一个临时解决方案,直到我让所有品牌团队有时间更改他们的API调用.

我写了这个函数:

CREATE OR REPLACE FUNCTION public.brand_lookup(IN i_brand TEXT )
  RETURNS SETOF RECORD VOLATILE AS
$$
BEGIN
   RETURN QUERY
     UPDATE subscriber
     SET brand = (SELECT brand FROM brand_translation
                  WHERE source = subscriber.source);
END;
$$
LANGUAGE plpgsql;

以及插入记录时触发函数的触发器:

CREATE TRIGGER brand_translation 
  AFTER INSERT ON subscriber
  FOR EACH ROW EXECUTE PROCEDURE public.brand_lookup();

但我的触发器返回错误“错误:函数public.brand_lookup()不存在”(但它成功创建)“.除了我的触发器没有看到我的功能,这个功能会做我做的事情吗?我有意吗?我在功能方面相当不错(你可能会说).

最佳答案 它可能会像这样工作:

CREATE OR REPLACE FUNCTION public.f_brand_lookup()
   RETURNS trigger AS
$func$
BEGIN
   SELECT INTO NEW.brand
          bt.brand
   FROM   brand_translation bt
   WHERE  bt.source = NEW.source;

   RETURN NEW;
END
$func$
LANGUAGE plpgsql;

CREATE TRIGGER brand_insert_before_lookup
BEFORE INSERT ON subscriber
FOR EACH ROW EXECUTE PROCEDURE public.f_brand_lookup();

你的例子太完全错了.
您需要从学习基础知识开始.一如既往,我建议非常精细的手册.
herehere开始.

点赞