Postgresql触发器功能似乎可以防止插入任何记录

时间:2013-11-25 17:59:02

标签: sql function postgresql triggers

我是Postgresql newb。

我创建了一个函数来检查INSERT是否尝试在两个不同的表中创建相同的值。

    CREATE OR REPLACE FUNCTION check_pids_not_equal()
  RETURNS trigger AS
$BODY$
begin 
if exists (select *
from cards c , echecks e
where c.pid = e.pid)
then
raise NOTICE 'Must have different PID than entry in cards.pid';
end if;
return null;
end
$BODY$
  LANGUAGE plpgsql

我以这种方式分配了触发器:

CREATE TRIGGER check_cards_pids_trigger
  BEFORE INSERT OR UPDATE
  ON cards
  FOR EACH ROW
  EXECUTE PROCEDURE check_pids_not_equal();

现在,每当我尝试在Cards表上执行任何记录插入时,我总是得到INSERT 0 0没有错误消息 - 即使记录显然是缺少列或错误列类型的错误记录。 / p>

关于罪魁祸首的任何想法?另外,如何显示更多错误报告?

1 个答案:

答案 0 :(得分:2)

如果要插入记录,则必须return new,如下所示:

CREATE OR REPLACE FUNCTION check_pids_not_equal()
  RETURNS trigger AS
$BODY$
begin 
    if exists (select * from cards c, echecks e where c.pid = e.pid) then
        raise NOTICE 'Must have different PID than entry in cards.pid';
        return null;
    end if;
    return new;
end
$BODY$
LANGUAGE plpgsql