在2 DB上执行连接

时间:2013-06-26 11:36:17

标签: postgresql psql

我在同一台服务器上有2个DB,具有相同的用户:

  • ckan_default
  • datastore_default

ckan_default 的关系是:

 Schema |             Name              | Type  |  Owner   
 -------+-------------------------------+-------+----------
 public | resource                      | table | ckanuser
 public | resource_group                | table | ckanuser
 public | package                       | table | ckanuser
 ....

datastore_default 的关系是:

  Schema |                 Name                 | Type  |  Owner   
  -------+--------------------------------------+-------+----------
  public | 1bc7932e-2507-467b-8c12-c9f321b760f7 | table | ckanuser
  public | 449138df-e089-41f2-8939-dcee53a31bc1 | table | ckanuser
  public | 7235f781-1b16-4abf-ac04-8d68fa62e432 | table | ckanuser
  ....

我不会加入2 DB ON ckan_default.resource.id = datastore_default。“关系名称”。

如何?

2 个答案:

答案 0 :(得分:3)

我认为你不能。

您可以使用dblink扩展名从A查询数据库B,但查询将与数据库A的数据上下文分开..这就是postgresql的工作方式。

编辑:您可以从dblink查询的结果中填充视图,然后使用它:

CREATE VIEW myremote_pg_proc AS
  SELECT *
    FROM dblink('dbname=postgres', 'select proname, prosrc from pg_proc')
    AS t1(proname name, prosrc text);
SELECT * FROM myremote_pg_proc WHERE proname LIKE 'bytea%';

我发布的链接中的示例。

答案 1 :(得分:1)

PL/Proxy是另一种选择,类似于dblink。我过去曾用它在服务器之间进行通信,我的用例是穷人的分布式数据库集群。对于某些大型报告,其他服务器上的数据已被提取,并且运行良好。虽然服务器都处于相同的托管位置,但如果其他数据库在地理位置上分散,那么您将为网络延迟和数据传输时间支付额外费用。