в одной БД1 есть таблица, содоржащая одну запись из столбца со времен посденей операции вставки.
CREATE TABLE time_rep
(
tm timestamp without time zone NOT NULL
)
WITH (OIDS=FALSE);
ALTER TABLE time_rep OWNER TO postgres;
в другой БД2 есть таблица:
CREATE TABLE inserted
(
id serial NOT NULL,
"name" character varying(20) NOT NULL,
data text,
"time" timestamp without time zone NOT NULL,
CONSTRAINT inserted_pkey PRIMARY KEY (id)
)
WITH (OIDS=FALSE);
ALTER TABLE inserted OWNER TO postgres;
где храняться строки со времем вставки.
Теперь мне надо из таблицы БД2 в таблицу БД1 вставить строки, время которых больше чем время строки из БД1.
пишу код
CREATE OR REPLACE FUNCTION table_update()
returns boolean as
$body$
declare
begin
insert into tab_slave SELECT * from
dblink('host=127.0.0.1 dbname=test user=postgres password=zzcz2com','select id, name from inserted where "time" >' || time_rep.tm)
as t (id integer, name varchar(20));
return true;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION table_update() OWNER TO postgres;
не нравится ему....как сделать?
А какая
А какая собственно ошибка?
если нужно догадаться, то предположительно здесь
dblink('host=127.0.0.1 dbname=test user=postgres password=zzcz2com','select id, name from inserted where "time" >' || time_rep.tm)
что можно исправить например так:
dblink('host=127.0.0.1 dbname=test user=postgres password=zzcz2com','select id, name from inserted where "time" >' || quote_literal((select tm from time_rep)))
именно так я и
именно так я и сделал уже)
толко у меня
толко у меня теперь новая пробелемма:
мне нужно вставить в удаленную таблицу строку, делаю так:
возвращает ошибку:
в принципе
в принципе сделал, но мне не нравиться, может можно как то по другому:
и при етом выдает ошибку:
но данные все таки вставляет в удаленную таблицу.
Можно ли сделать так, что бы вставить весь селект? Ведь иначе если будет 100 столбцов то и quote_literal()
надо будет 100 раз писать....
ошибку он
ошибку он выдает, потому что результат селекта вы никуда не сохраняете, должно быть либо
или так
спасибо, я
спасибо, я сделал через perform.
просто перевел ошибку