ndt*_*viv 55
根据http://wiki.postgresql.org/wiki/FAQ
无法查询当前数据库以外的数据库.因为PostgreSQL加载特定于数据库的系统目录,所以不确定跨数据库查询应该如何表现.contrib/dblink允许使用函数调用进行跨数据库查询.当然,客户端也可以同时连接到不同的数据库,并在客户端合并结果.
编辑:3年后(2014年3月),此FAQ条目已经过修订,更有帮助:
如何使用多个数据库执行查询?
无法直接查询当前数据库以外的数据库.因为PostgreSQL加载特定于数据库的系统目录,所以不确定跨数据库查询应该如何表现.
PostgreSQL中的SQL/MED支持允许创建"外部数据包装器",将远程数据库中的表链接到本地数据库.远程数据库可能是同一个PostgreSQL实例上的另一个数据库,也可能是世界各地的数据库,没关系.postgres_fdw内置于PostgreSQL 9.3并包含读/写支持; 9.2的只读版本可以作为contrib模块进行编译和安装.
contrib/dblink允许使用函数调用进行跨数据库查询,并且可用于更旧的PostgreSQL版本.与postgres_fdw不同,它不能"压低"条件到远程服务器,因此它通常会获取比您需要的更多数据.
当然,客户端也可以同时连接到不同的数据库,并在客户端合并结果.
Lui*_*Vaz 30
忘了dblink!
向Postgres_FDW问好:
使用
postgres_fdw以下方法准备远程访问:
使用安装
postgres_fdw扩展CREATE EXTENSION.创建外部服务器对象,使用
CREATE SERVER,表示要连接的每个远程数据库.指定除用户和密码之外的连接信息,作为服务器对象的选项.使用
CREATE USER MAPPING您要允许访问每个外部服务器的每个数据库用户创建用户映射.指定远程用户名和密码,以用作用户映射的用户和密码选项.使用
CREATE FOREIGN TABLE或IMPORT FOREIGN SCHEMA为要访问的每个远程表创建外部表.外表的列必须与引用的远程表匹配.但是,如果指定正确的远程名称作为外部表对象的选项,则可以使用与远程表不同的表和/或列名.现在,您只需
SELECT要从外表访问存储在其基础远程表中的数据.
它甚至对大数据也很有用.
是的,dblink尽管有很多性能方面的考虑,也可以使用此方法。
下面的示例将要求当前的SQL用户对两个数据库都具有权限。如果db2不在同一集群上,那么您将需要替换dbname=db2为dblink文档中定义的完整连接字符串。
SELECT *
FROM table1 tb1
LEFT JOIN (
SELECT *
FROM dblink('dbname=db2','SELECT id, code FROM table2')
AS tb2(id int, code text);
) AS tb2 ON tb2.column = tb1.column;
Run Code Online (Sandbox Code Playgroud)
如果table2非常大,则可能会出现性能问题,因为子查询会table2在执行连接之前加载整个查询。
只需几步,您就可以达到目标: 按照这个参考一步一步来
WE HAVE BEEN CONNECTED TO DB2 WITH TABLE TBL2 AND COLUMN COL2
ALSO THERE IS DB1 WITH TBL1 AND COLUMN COL1
*** connecting to second db ie db2
Now just **copy paste the 1-7 processes** (make sure u use correct username and password and ofcourse db name)
1.**CREATE EXTENSION dblink;**
2.**SELECT pg_namespace.nspname, pg_proc.proname
FROM pg_proc, pg_namespace
WHERE pg_proc.pronamespace=pg_namespace.oid
AND pg_proc.proname LIKE '%dblink%';**
3.**SELECT dblink_connect('host=localhost user=postgres password=postgres dbname=db1');**
4.**CREATE FOREIGN DATA WRAPPER postgres VALIDATOR postgresql_fdw_validator;**
5.**CREATE SERVER postgres2 FOREIGN DATA WRAPPER postgres OPTIONS (hostaddr '127.0.0.1', dbname 'db1');**
6.**CREATE USER MAPPING FOR postgres SERVER postgres2 OPTIONS (user 'postgres', password 'postgres');**
7.**SELECT dblink_connect('postgres2');**
---Now, you can SELECT the data of Database_One from Database_Two and even join both db results:
**SELECT * FROM public.dblink
('postgres2','SELECT col1,um_name FROM public.tbl1 ')
AS DATA(um_userid INTEGER),tbl2 where DATA.col1=tbl2.col2;**
You can also Check this :[How to join two tables of different databases together in postgresql [\[working finely in version 9.4\]][1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79982 次 |
| 最近记录: |