Как вы можете сделать обновление таблицы в другой базе данных, используя 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);