【发布时间】:2012-11-20 01:02:30
【问题描述】:
我已经创建了简单的触发器:
CREATE OR REPLACE FUNCTION emplacement_libre() RETURNS TRIGGER AS $BODY$
DECLARE
i int;
curseur CURSOR FOR
SELECT COUNT(*) FROM beta2.astres a
INNER JOIN beta2.planetes p ON a.id = p.astre_id
WHERE a.galaxie = NEW.galaxie AND
a.ss = NEW.ss AND
a.position = NEW.position;
BEGIN
OPEN curseur;
LOOP
FETCH curseur INTO i;
IF i>0 THEN
RAISE EXCEPTION 'la planète est déjà occupée';
END IF;
EXIT WHEN NOT FOUND;
END LOOP;
CLOSE curseur;
RETURN NEW;
END;
$BODY$ LANGUAGE plpgsql;
CREATE TRIGGER emplacement_libre
BEFORE INSERT OR UPDATE ON beta2.astres
FOR EACH ROW EXECUTE PROCEDURE emplacement_libre();
在 PostgreSQL 文档中,写的是触发器的名称:
赋予新触发器的名称。这必须与同一表的任何其他触发器的名称不同。该名称不能是模式限定的 - 触发器继承其表的模式。对于约束触发器,这也是使用 SET CONSTRAINTS 修改触发器行为时使用的名称。
所以我希望我的触发器能够获取架构 beta2,因为我在 CREATE TRIGGER 请求中使用了它,但事实并非如此,我的触发器是在默认 public 架构中创建的......为什么?
【问题讨论】:
-
你用的是什么版本的postgresql?
-
我的问题是我没有调用过程 beta2.emplacement_libre(),而只调用了 emplacement_libre()。现在问题解决了
-
那么我想结束这个问题。
-
同意我们应该关闭它。
标签: postgresql triggers schema