我在PostgreSQL中写了一个简单的更新语句:
UPDATE <schema-name>.<table-name>
set column1 = y
where column2 = x;
我检查了具有相同条件的select语句返回一行,但是当我运行它时,我得到了消息:
"更新0
查询在26秒内返回成功">
有什么不对的?
编辑:
我注意到表在更新时有触发器,当我禁用这个触发器时,更新语句工作。
这是触发代码:
BEFORE DELETE OR UPDATE
ON <schema-name>.<table-name>
FOR EACH ROW
EXECUTE FUNCTION <schema-name>._isk_to_h_proc();
和函数代码:
CREATE OR REPLACE FUNCTION <schema-name>._isk_to_h_proc()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
declare
v_taarich date;
begin
if (TG_OP = 'DELETE') then
begin
v_date = now();
end;
else
v_date = NEW.edit_date;
end if;
return null;
insert into <schema-name>.<table2-name>
(
column1,
column2,
column3
)
values(
nextval('table2_sequence'),
OLD.coulmn1,
NEW.column2,
v_date,
);
end;
$BODY$;
ALTER FUNCTION <schema-name>._isk_to_h_proc
OWNER TO postgres;
终于找到问题了。这是因为"返回"。子句中。返回null防止插入或删除。参见PostgreSQL文档
在我加入@ a_horse_with_no_name的地方检查值的兼容性。这不是PostgreSQL的问题