2

我在同一台服务器上使用相同的用户有 2 个数据库:

  • 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
  ....

我不会在 ckan_default.resource.id = datastore_default."NAME OF RELATION" 上加入 2 个 DB。

如何?

4

2 回答 2

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%';

我发布的链接中的示例。

于 2013-06-26T14:52:29.370 回答
1

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

于 2013-06-26T16:11:17.753 回答