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. 【ZBH选讲·拍照】

    [问题描述] 假设这是一个二次元.LYK召集了n个小伙伴一起来拍照.他们分别有自己的身高Hi和宽度Wi.为了放下这个照片并且每个小伙伴都完整的露出来,必须需要一个宽度为ΣWi,长度为max{Hi}的相 ...

  2. testng自定义注解

    在testng中大部分的注解已经可以满足我们测试的需求,但是在测试的时候想要通过注解的方式加入自己测试一些内容,比如 测试项目 测试描述  验证点等信息,可通过自定义注解的方式实现. 具体操作步骤如下 ...

  3. Numpy基本数据结构

    Numpy数组是一个多维数组对象,称为ndarray.其由两部分组成: 1 实际的数据 2 描述这些数据的元数据 一 ndarray的方法 # 多维数组ndarray import numpy as ...

  4. 移动端web开发 浅析

    1. viewport ① viewport在移动端承载网页的区域:具有默认格式 ②设置viewport属性,适配移动端设备 主流设置: <meta name = ”viewport” cont ...

  5. 关于each()、find()、filter()遍历节点的操作方法

    关于each().find().filter()遍历节点的操作方法 each语法: each(fn)  ; 返回值:jQuery fn:代表对于每个匹配元素所要执行的函数 each()方法共有三种形式 ...

  6. [ CodeVS冲杯之路 ] P1011

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1011/ 一开始以为是道数学题,列出了一个公式 后面验证,发现只能推出第一次,后面的还需要迭代,推翻这个公式 又去瞟了一 ...

  7. opengl glEnableClientState() 和 glDisableClientState() 作用

    http://zhidao.baidu.com/link?url=c3m55lgpjhU1Rb7TEP-aTGQAX3-GrcBk5NaUC2UA1ZtQiCCtHJzB_KoG7pWvPEybfYv ...

  8. C++笔试题目大全(笔试宝典)(不断完善中)

    1.new . delete . malloc . free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数. malloc 与 fre ...

  9. Sigslot介绍

    最近在看delta3d开源引擎,最底层封装的消息机制,是基于其has_slots,搜索了一下其资料发现是一个很好用的C++库,先对其简单介绍一下. 首先说下插槽机制. 插槽系统常用的有三种:boost ...

  10. 图片工具picpick

    picpick 功能 截屏滚动窗口可以用来截取长图