Что-то вроде строк ниже должно работать:
SELECT dblink_connect('hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd');
-- change the connection string to your taste
SELECT dblink_exec('INSERT INTO test (some_text) VALUES (''Text go here'');');
Где test
— это таблица в удаленной базе данных со следующим определением:
CREATE TABLE test(
id serial
, some_text text
);
После запуска dblink_exec()
вы можете проверить результаты в удаленной базе данных (или локально, используя dblink()
, как в примере ниже).
SELECT * FROM dblink('SELECT id, some_text FROM test') AS d(id integer, some_text text);
id | some_text
----+--------------
1 | Text go here
(1 row)
Вы также можете обернуть вызов dblink_exec
в функцию:
CREATE OR REPLACE FUNCTION f_dblink_test_update(val text, id integer) RETURNS text AS
$body$
SELECT dblink_exec('UPDATE torles.test SET some_text=' || quote_literal($1) || ' WHERE id = ' || $2);
$body$
LANGUAGE sql;
Как видите, вы даже можете динамически создавать строку запроса. (Не то чтобы я поддерживал этот подход, поскольку вы должны быть осторожны, чтобы таким образом не создать уязвимость SQL-инъекций в вашей системе.)
Поскольку dblink_exec
возвращает текстовое сообщение о том, что она сделала, вы должны определить свою функцию как RETURNS text
, если только после вызова dblink_exec
нет других операторов, возвращающих значение.
person
dezso
schedule
06.09.2012
INSERT
в вашем случае). - person dezso   schedule 06.09.2012