postgres_fdw的使用参考来自:https://my.oschina.net/Kenyon/blog/214953

postgres跨库查询可以通过dblink或者postgres_fdw来完成,二者的比较可以参看文档:https://my.oschina.net/u/270810/blog/174791

1.安装fdw扩展

 create extension postgres_fdw;

查询postgres的所有拓展,验证fdw安装成功:

 select * from pg_available_extensions; 

2.创建远程server

server_remote是给这个远程server取得名字。options中是连接远程server需要的信息,包括地址、端口和需要连接的数据库名。

 create server server_remote
FOREIGN data wrapper postgres_fdw
OPTIONS(host '168.2.237.207', port '', dbname 'aasccs');

查看所有远程连接,验证server创建成功。

 SELECT * from pg_foreign_server;

3.创建用户匹配信息

表示在server_remote下为角色postgres创建一个用户匹配信息,options里是用户名和密码。

 create user mapping for postgres server server_remote options(user 'postgres',password 'yourpassword');

4.在本地创建外部表

现在远程连接中需要连接的数据库为aasccs,需要用到的表为t_resource和t_permission,因此在完成上述创建后,就可以在本地创建外部表,表中的记录则完全和远程表中一样。

注:本地t_resource表中字段列数可以少于远程t_resource表,但是字段名必须完成一致,否则会提示错误。

 CREATE FOREIGN TABLE t_resource
( fd_resid SERIAL,
fd_res_name TEXT,
fd_res_desc TEXT,
fd_tenantid INTEGER,
fd_service TEXT,
fd_display_name TEXT,
fd_modify_date TEXT,
fd_modify_person_id INTEGER
)
server server_remote
options (table_name 't_resource'); CREATE FOREIGN TABLE t_permission
( id SERIAL,
fd_groupid INTEGER,
fd_res_name TEXT,
fd_resid INTEGER,
fd_get BOOLEAN,
fd_post BOOLEAN,
fd_put BOOLEAN,
fd_delete BOOLEAN,
fd_modify_date TEXT,
fd_modify_person_id INTEGER
)
server server_remote
options (table_name 't_permission');

创建完后,可以看到本地也生成了t_resource表和t_permission表。

5.测试

(1)在本地数据库中运行查询sql

 select * from t_resource;

结果:跨库查询成功。

(2)在远程t_resource表中插入一条记录

结果:本地t_resource表中同步多了一条记录。

(3)在本地t_resource表中插入一条记录,使其自动生成id

结果:主键报异常。原因是虽然本地t_resource表中拥有了远程表中一样的数据,但是新增时,主键却依然从1开始自增。而不是接着原来的id顺序。(使用sql新增也同样)

在创建本地t_resource表时尝试加入主键信息,但是创建时候报错了。因为跨库的时候,创建如果使用自增id,会报错。

(4)在本地t_resource表中插入一条记录,其依赖的外键t_tenantid不存在

结果:新增失败,提示外键不存在。所以可见本地表仍然保持了远程表的外键信息。

(5)在本地t_resource表中插入一条记录,唯一键冲突

结果:新增失败,提示唯一键冲突。所以可见本地表仍然保持了远程表的唯一键信息。

(6)在本地t_resource表中插入一条数据,避开前面几个冲突,成功插入

结果:远程t_resource表同步多了一条数据。

(7)测试的结论

跨库查询成功;

主键、外键和唯一键都保留了下来。但是新增时主键自增是从本地表的1开始,而不是接着远程表的id,造成新增时id冲突;

远程t_resource和本地t_resource的新增都会同步对方。

2017.9.15 postgres使用postgres_fdw实现跨库查询的更多相关文章

  1. 跨库查询(OpenDataSource)与链接服务器(Linking Server)

    一:跨库查询 Openrowset/opendatasource() is an ad-hoc method to access remote server's data. So, if you on ...

  2. mysql 跨库查询问题

    MySQL实现跨服务器查询 https://blog.csdn.net/LYK_for_dba/article/details/78180444 mysql> create database l ...

  3. 如何使用SQL SERVER数据库跨库查询

    SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...

  4. SqlServer跨库查询

    由于业务的拆分,数据库拆分为两种作用: 汇总数据库(Master,头节点数据库), 子节点数据库(Compute Node,计算子节点数据库) 这样,就设计到子节点访问头节点数据库中的某张汇总表,这种 ...

  5. ACCESS-如何多数据库查询(跨库查询)

    测试通过:ACCESSselect * from F:\MYk.mdb.tablename说明:1.查询语句2.来原于哪(没有密码是个路径)3.查询的表名 ====================== ...

  6. Access数据库跨库查询及记录集区分

    医疗设备软件一般都是单机软件,如果是Windows平台,常会选择Access数据库存储结构化数据,因为他轻量,便于部署.然而随着医疗信息化的发展,医生希望对多台单机设备的数据进行管理,采用网络数据库当 ...

  7. EF 跨库查询

    原因:最近公司项目,遇到一个ef跨库查询的问题.(只是跨库,并不是跨服务器哈) 主要我们的一些数据,譬如地址,城市需要查询公共资料库. 但是本身我的程序设计采用的是ef框架的.因此为这事花费了1天时间 ...

  8. SQL Server 跨库查询

    1. 开启Ad Hoc Distributed Queries组件,在sql查询编辑器中执行如下语句: reconfigure reconfigure 2. 跨库查询操作 select * from ...

  9. SQLServer跨库查询--分布式查询

    出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临 ...

随机推荐

  1. Gcd反应堆 (pgcd)

    Gcd反应堆 (pgcd) 题目描述 不知什么时候起,TA突然对gcd产生了浓厚的兴趣,于是他为此编写了个程序,输入分别不大于m,n (1<m,n<=10^7)的两个数,就能得出gcd(m ...

  2. 【CZY选讲·棋盘迷宫】

    题目描述 一个N*M的棋盘,’.’表示可以通过,’#’表示不能通过,给出Q个询问,给定起点和终点,判断两点是否联通,如联通输出“Yes”,否则输出“No”. 数据范围 N,M <=500,Q ...

  3. Log4Net日志分类和自动维护

    背景 在程序中,我们调试运行时信息,Log4Net是一个不错的解决方案.不知道是我用的不好,用到最后反而都不想看日志了.原因是因为我n个功能使用的默认的Logger来记录日志,这样以来,所有功能记录的 ...

  4. API函数的学习与运用

    1.窗口 1.获取最前方的窗口句柄 GetForegroundWindow() 返回值:HWND类型. 调用方式:HWND hwnd=GetForegroundWindow();即hwnd就存着你的窗 ...

  5. PHP开发笔记(一)

    Location of the Android sdk has not been setup in the preference. 分析与解决: 第一次安装好adt后, 选择android sdk的路 ...

  6. 关于js拖拽功能,拖拽元素的position:fixed;left:0;right:0;样式引起左右拖动元素会出现落后鼠标移动距离的问题

    被拖拽元素的样式如果为:position:fixed;left:0;right:0;(当时是为了让fixed定位的元素水平居中加的left:0;right:0;避免js动态计算定位的麻烦)时左右拖动会 ...

  7. python每日一类(3):os和sys

    os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functio ...

  8. js-获取用户移动端网络类型:wifi、4g、3g、2g...

    今天工作时间很宽裕, 忽然想起,自己做过的所有页面中,有些页面经常会面临用户在网络状态很差的时候打开页面,页面是挂了的状态,感觉很LOW~. 所以我决定在今后的页面中我需要先判断用户的网络状态, 若是 ...

  9. J.U.C并发框架源码阅读(十六)FutureTask

    基于版本jdk1.7.0_80 java.util.concurrent.FutureTask 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is su ...

  10. 原来是adblock惹的祸

    一个在本地开发好的网站,放到服务器就不行了.花了好几个小时的时间,最后试着把adblock关了,然后正常了.