Мне необходимо получить доступ к данным второй БД в кластере. Для этого я пытаюсь использовать дополнение postgres_fdw и CREATE SERVER, CREATE FOREIGN TABLE, но получается следующее:
In DB1:
CREATE TABLE cst
(
jd smallserial NOT NULL,
txt character(16),
CONSTRAINT pk PRIMARY KEY (jd)
)
;
insert into cst (txt) values
("first")
("second")
("third");
In DB2:
CREATE EXTENSION postgres_fdw;
CREATE SERVER ttt
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'test', port '5432');
CREATE USER MAPPING FOR uuu SERVER ttt OPTIONS (user 'uuu', password '....');
CREATE FOREIGN TABLE cst (
jd smallserial NOT NULL,
txt character(16)
)
SERVER ttt;
select * from cst; -> работает нормально
insert into cst(txt) VALUES
('Cheese'),
('Bread'),
('Milk');
Ошибка: "(jd)=(1)" exists.
CONTEXT: Remote SQL command: INSERT INTO public.cst(jd, txt) VALUES ($1, $2)
insert into cst(jd,txt) VALUES
(null,'Cheese'),
(null,'Bread'),
(null,'Milk');
Ошибка: "jd can not be null.
insert into cst(jd,txt) VALUES
(4,'Cheese'),
(5,'Bread'),
(6,'Milk');
производит вставку, затем попытка в DB1
insert into cst (txt) values ("new")
Ошибка: "(jd)=(4)" exists.
.
Таким образом генерирование identity не выполняется в DB1 при вставке из DB2.
Я подозреваю что и триггеры не буду исполняться так же.
Кто может укажите перстом на способ разрешения проблемы.
А чем не устраивает
А чем не устраивает DBLINK?
http://postgresql.ru.net/manual/dblink.html
Потому что не устраивает
Вот почему когда спрашивают одно обязательно надо что другое ляпнуть
Видимо же преимущество FT - один раз создал таблицу указав требуемую безопасность(и это основное) и потом с ней работаешь и удобно пишешь запросы, а dblink требует постоянно креденшиналы соединения указывать + сам запрос обращания к таблице неудобно писать
P.S. у меня та же проблема -
а view или synonym чем не
а view или synonym чем не устраивают