jul*_*iam 4 postgresql trigger
我正在尝试创建一个函数,如果我更新数据库行的任何列,它将增加我的版本列值 (int)。例如,如果我有一个包含列(id、标题、版本)并且默认版本为 1 的 foo 表,我希望我的 vesrion 在我更新单个 foo 行的标题后增加。我编写了以下函数,但是一旦我测试它就会抛出错误:
create or replace function update_foo_version()
returns trigger as $body$
begin
update foo
set version = version::int + 1
where old.id=new.id;
return new;
end
$body$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)
我对这个功能的触发器:
create trigger update_version
after update on foo
for each row execute procedure update_foo_version();
Run Code Online (Sandbox Code Playgroud)
很难判断错误消息哪里出了问题,但我会推测两件事。你想要一个BEFORE
触发器,但这是行不通的: where old.id=new.id;
我想你想要的是,
create or replace function update_foo_version()
returns trigger as $body$
begin
new.version = old.version + 1;
return new;
end
$body$
language plpgsql;
create trigger update_version
BEFORE update on foo
for each row execute procedure update_foo_version();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3740 次 |
最近记录: |