Как вы можете сделать обновление таблицы в другой базе данных, используя postgres dblink?

Запрос, который должен быть выполнен, так же прост, как показано ниже:

Update employee set is_done=true; 

Таблица, которую я хочу обновить, присутствует только в другой базе данных.

Я использовал эти виды запросов dblink.

INSERT Into mytable select * from 
dblink('host=10.1.1.1
 user=user
 password=password
 dbname=oat', 'SELECT * from employee') tt(
     user_id integer,
     is_done boolean

 ) on conflict(user_id) do nothing;

Как я могу обновить поле таблицы сотрудников, которое находится в другой базе данных?

Я также хочу знать, можем ли мы также выполнить удаление аналогичным образом - удалить целую строку для данного идентификатора

Кроме того, что, если мне нужно было выполнить соединение с текущей таблицей базы данных в запросе на обновление?

2 ответа

Решение
SELECT dblink_connect('host=10.1.1.1
 user=user
 password=password
 dbname=oat');

SELECT dblink_exec('Update employee set is_done=true');

И я рекомендую вам также использовать FDW, особенно если вы используете 9.6

Обновить

для dblink вы "оборачиваете" qry и отправляете его. таким образом, единственный способ "объединить" завернутый запрос - это динамический SQL в DO блок. Что было бы очень некрасиво. Консьержер создания FOREIGN TABLE - это позволит вам легко обновляться из локальной таблицы

обновить два

https://www.postgresql.org/docs/current/static/sql-createserver.html https://www.postgresql.org/docs/current/static/sql-createusermapping.html https://www.postgresql.org/docs/current/static/sql-createforeigntable.html

поэтому вы создаете сервер, отображаете пользователя и создаете стороннюю таблицу.

после завершения обновления, как если бы он был локальным

Это сработало для меня.

 select * from dblink('host=10.1.1.1
     user=user
     password=password
     dbname=oat','Update employee set is_done =true' ) tt(
     updated text);
Другие вопросы по тегам