我在同一台服务器上有2个DB,具有相同的用户:
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。“关系名称”。
如何?
答案 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。我过去曾用它在服务器之间进行通信,我的用例是穷人的分布式数据库集群。对于某些大型报告,其他服务器上的数据已被提取,并且运行良好。虽然服务器都处于相同的托管位置,但如果其他数据库在地理位置上分散,那么您将为网络延迟和数据传输时间支付额外费用。