postgres中当前更新的行

时间:2015-02-03 06:25:17

标签: sql postgresql triggers plpgsql

我有2个表A和表B. 表A:

col1   col2   col3  col4   col5
 1       A       1     0     N/A

和类似的表B我想将表A复制到表B中我为它写了一个触发器 触发功能:

CREATE OR REPLACE FUNCTION add_data()
RETURNS trigger AS
$BODY$DECLARE
nos integer;
a integer;
b integer;
c integer;
d integer;
e text;

select max(col1) INTO nos from "A"; 

select col1,col2,col3,col4,col5 into a,b,c,d,e from A where col1=nos;

INSERT INTO "B" VALUES(a,b,c,d,e)


RETURN NULL;
END
问题是 1)经过几秒后col3,col4,col5值在3-4秒后更新 2)col1值不断增加所以我不能使用max()是否有任何其他方法来选择正在更新的特定行。 另外我不能使用max(),因为在更新表A中的col3-5之间,表A中有一个新条目,触发器无法提供所需的输出

2 个答案:

答案 0 :(得分:0)

见下面的例子,

create table a (col1 int,col2 int,col3 int,col4 int,col5 int);


create table b (col1 int,col2 int,col3 int,col4 int,col5 int);

用于测试目的,将一些值插入表a

insert into a select 11,21,31,41,51

现在表a有一行而表b为空,现在创建一个触发器,如下所示

create or replace function a_to_b()
RETURNS trigger AS
$$
begin
insert into b (col1, col2, col3, col4, col5) values (new.col1, new.col2, new.col3, new.col4, new.col5);
RETURN NULL;
end
$$
language plpgsql

并将触发器分配给表a

CREATE TRIGGER add_data
  AFTER insert -- or update
  ON a
  FOR EACH ROW
  EXECUTE PROCEDURE a_to_b();

再次将值插入表a

insert into a select 1,2,3,4,5

现在检查两个表

select * from a;
select * from b

答案 1 :(得分:0)

我尝试了很多方法,但最终在java中使用了synchronize方法。有效。谢谢所有