远程插入和更新数据库?

时间:2014-03-05 05:24:10

标签: database vb.net postgresql

我的工作环境(inventory based Software)是一个Head Office (H.O)和4 Branches。这五个应用程序(包括H.O)在每个应用程序中都有相同的数据库,

所有表格和所有表格在5个数据库中相同,即相同的5个数据库。目前,产品,派对等仅在H.O中创建,这些项目(无论是派对还是产品)将通过电子邮件作为XML传输到所有4个分支,以便他们可以导入XML 1}}(请注意,例如我们为所有5个数据库中的所有表管理相同的id,即如果product id 4005 H.O XML,则所有分支中的PostgreSQL都应该相同。 / p>

我想要的是,我需要更新或插入而不使用{{1}}通过电子邮件或任何其他简单方法或集中数据库方法(即所有应用程序的一个数据库)发送

数据库位于{{1}}。

1 个答案:

答案 0 :(得分:0)

以下几行应该有效:

SELECT dblink_connect('hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd');

- 根据您的喜好更改连接字符串

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文本,除非在dblink_exec调用之后还有其他的值返回语句。