Sql postgres中当前更新的行

Sql postgres中当前更新的行,sql,postgresql,triggers,plpgsql,Sql,Postgresql,Triggers,Plpgsql,我有两张桌子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;

我有两张桌子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中有一个新条目,触发器无法提供所需的输出参见下面的示例

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中插入一些值

现在表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

再次在表a中插入值

现在检查两个表

select * from a;
select * from b

我尝试了很多方法来实现这一点,但最终还是在java中使用了同步方法。成功了。谢谢大家

也许我错过了什么。但是您根本不需要选择:插入到B col1,col2,col3,col4,col5值new.col1,new.col2,new.col3,new.col4,new.col5:表A在不断增加,所以我不会得到所有的值,那么更新表后更改的数据呢A@SHRUTAYUKale我不明白表格a是如何插入的???@DominicPretto:插入到一个…@a_horse_和_no_名字我不明白OP说了什么,知道吗?在Java中使用同步方法至少对我来说毫无意义。synchronized不是一种方法。我看不出这将如何将数据插入数据库。
CREATE TRIGGER add_data
  AFTER insert -- or update
  ON a
  FOR EACH ROW
  EXECUTE PROCEDURE a_to_b();
insert into a select 1,2,3,4,5
select * from a;
select * from b