2015-02-03 4 views
0

У меня есть 2 таблицы таблицы А и таблица B Таблица A:текущий обновленный ряд в Postgres

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

и аналогично таблице BI требуется реплицировать таблицу А в таблице B я написал триггер для него TRIGGER ФУНКЦИЯ:

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 значения постоянно возрастают, так что я не могу использовать макс() есть ли другие способ выбора конкретной строки, которая обновляется. Также я не могу использовать (макс), потому что между ними обновления col3-5 в таблице А есть новая запись в таблице А триггер не может дать желаемый результат

+1

Может быть, я что-то упустил. Но вам совсем не нужен выбор: «вставлять в значения« B »(col1, col2, col3, col4, col5) (new.col1, new.col2, new.col3, new.col4, new.col5) ': http://www.postgresql.org/docs/current/static/plpgsql-trigger.html –

ответ

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 
+0

Таблица A постоянно растет, поэтому я не получаю все значения и о измененных данных после обновления таблицы A –

+0

@ SHRUTAYUKale Я не понимаю – octobot

+0

как таблица 'a' вставляет ?? – octobot

0

Я перепробовал много способов сделать это, но финал y использовал метод синхронизации в java. Это сработало. спасибо

+0

«* использовать метод синхронизации в Java *» не имеет смысла (по крайней мере для меня). 'synchronized' не является методом. И я не вижу, как это будет вставлять данные в базу данных. –

Смежные вопросы