接上一篇《PG-跨库操作-dblink》;讲下postgres_fdw的使用;postgres_fdw工作原理详细介绍可以去看下《PostgreSQL指南》第4章;

对FDW特性;还支持在PostgreSQL异构数据库的同步、迁移的场景。FDW随着Postgres版本而升级、优化,对分布式架构也是支持的。

一、新建插件postgres_fdw

安装插件postgres_fdw

lottu01=# create extension postgres_fdw;

二、新建远程数据库服务器

2.1、在本地库创建SERVER

--1 赋予lottu01对应权限
lottu01=# grant usage on foreign data wrapper postgres_fdw to lottu01;
GRANT
lottu01=# \c lottu01 lottu01
You are now connected to database "lottu01" as user "lottu01".
--2 创建server
lottu01=> CREATE SERVER lottu FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.1.221', port '6000', dbname 'lottu');
CREATE SERVER

2.2、在本地库创建user mapper

lottu01=> CREATE USER MAPPING FOR lottu01 SERVER lottu OPTIONS (user 'lottu', password 'li0924');
CREATE USER MAPPING

2.3、创建外部表

lottu01=> CREATE FOREIGN TABLE t1 (id int, info text) server lottu OPTIONS (schema_name 'public', table_name 't1');
CREATE FOREIGN TABLE
lottu01=> select * from t1;
  id  | info  
------+-------
 1001 | lottu
 1002 | hello
 1003 | rax
 1004 | rax
 1005 | lottu
(5 rows)

2.4、导入外部表

CREATE FOREIGN TABLE中声明的列数据类型和其他性质必须要匹配实际的远程表。列名也必须匹配,不过也可以为个别列附上column_name选项以表示它们在远程服务器上对应哪个列。在很多情况中,要手工构造外部表定义,使用IMPORT FOREIGN SCHEMA会更好。

lottu01=> create schema ft;
CREATE SCHEMA
lottu01=> IMPORT FOREIGN SCHEMA public FROM SERVER lottu INTO ft;
IMPORT FOREIGN SCHEMA

三、扩展

3.1、相关系统表

通过下列系统表可以查看数据库外部表信息。

系统表 简命令操作 含义
pg_extension \dx 插件
pg_foreign_data_wrapper \dew 支持外部数据库接口
pg_foreign_server \des 外部服务器
pg_user_mappings \deu 用户管理
pg_foreign_table \det 外部表

3.2、使用优化

减少对远端服务器的连接影响;可以使用物化视图;

--1、在本地数据库创建物化视图
create materialized view mv_t1 as select * from t1;
--2、 刷新一下本地的物化视图即可看到新进来的数据:
refresh materialized view mv_t1

四、应用场景

4.1、数据同步

本地创建外部表;可对外部表支持执行delete、update、insert语句;同时远程数据库的表也会执行相对应的操作。例如两个数据库实现token的一致。

4.2、数据迁移

在导入外部表;可以实现数据迁移。

4.3、分布式架构使用

citus的实现原理是采用FDW特性。安装很简单;但维护注意点比较多;想要更多了解可以找陈华军老师。

PG-跨库操作-postgres_fdw的更多相关文章

  1. 【TP3.2】跨库操作和跨域操作

    一.跨库操作:(同一服务器,不同的数据库) 假设UserModel对应的数据表在数据库user下面,而InfoModel对应的数据表在数据库info下面,那么我们只需要进行下面的设置即可. class ...

  2. sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。

    用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...

  3. sql server 跨库操作

    SELECT *FROM OPENDATASOURCE('SQLOLEDB','Data Source=sql服务器名;User ID=用户名;Password=密码;').PersonDb.dbo. ...

  4. SQL 使用openquery进行跨库操作

    摘自:http://www.cnblogs.com/aji88/archive/2009/11/06/1597263.html 对给定的链接服务器执行指定的传递查询.该服务器是 OLE DB 数据源. ...

  5. PG-跨库操作-dblink

    在PostgreSQL数据库之间进行跨库操作的方式 dblink postgres_fdw 本文先说说dblink:dblink是一个支持从数据库会话中连接到其他PostgreSQL数据库的插件.在其 ...

  6. 实现数据库的跨库join

    功能需求 首先要理解原始需求是什么,为什么要跨库join.举个简单的例子,在日志数据库log_db有一份充值记录表pay_log,里面的用户信息只有一个userid:而用户的详细信息放在主库main_ ...

  7. FreeSql 如何实现 Sqlite 跨库查询

    FreeSql 是 .NetFramework 4.6+..NetCore 下的 ORM 功能库,提供了丰富的功能,支持五种流行数据库 MySql/SqlServer/PostgreSQL/Oracl ...

  8. Yii2 跨库orm实现

    近期在对公司的Yii2项目进行子系统拆分,过度阶段难免会有一些跨库操作,原生语句还好,加下库名前缀就可以了,可是到了orm问题就来了,特别是用到model做查询的时候,现在来记录一下跳过的坑, 像下面 ...

  9. 2017.9.15 postgres使用postgres_fdw实现跨库查询

    postgres_fdw的使用参考来自:https://my.oschina.net/Kenyon/blog/214953 postgres跨库查询可以通过dblink或者postgres_fdw来完 ...

随机推荐

  1. 算法-heapq模块优先队列

    heapq模块, 优先队列,小顶堆,最少值放在顶部,值越小,优先级越高 heapq.heappop(heap) 从堆中弹出最小的元素,并重新调整 heapq.heappush(heap, item)新 ...

  2. Spring Security认证流程分析--练气后期

    写在前面 在前一篇文章中,我们介绍了如何配置spring security的自定义认证页面,以及前后端分离场景下如何获取spring security的CSRF Token.在这一篇文章中我们将来分析 ...

  3. Solr的原理及使用

    1.Solr的简介Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过 ...

  4. docker-compose 官网下载特别慢怎么办?

    docker compose 官放推荐的下载方式是这样的: sudo curl -L "https://github.com/docker/compose/releases/download ...

  5. DevOps系列(1)-总体架构

    扯闲淡 在进入正式话题之前,先扯个淡,这算是第一篇我正式在博客上发布的随笔吧,之前也一直有想写点什么,将自己多年的工作经验分享出来,供大家参考点评,但是奈何一直对自己的文字功底不自信(其实也确实比较烂 ...

  6. 从零开始的SpringBoot项目 ( 三 ) 项目打包( jar包篇 )

    一.准备工作 1.工具:Idea , maven 2.首先得保证 pom 有 maven 插件 二.开始打包 找到最右边的Maven Projects,点击进去,选择需要打包的项目,并点击 insta ...

  7. Redis+Kafka异步提高并发

    Redis+Kafka异步提高并发 Redis+Kafka异步提高并发 设计 实现 提交请求接口 Kafka消费队列 异步处理Service 客户端轮询获取结果 Redis集群节点配置 KafKa集群 ...

  8. 创建VUE+Element-UI项目

    创建项目步骤 安装node.js后,使用管理员角色在cmd中依次运行下列步骤 vue init webpack hello-vue 创建项目文件 cd hello-vue 进入项目 npm insta ...

  9. Python发送get、post请求

    import json import requests #获取北京天气 # #url= "https://wis.qq.com/weather/common?source=xw&we ...

  10. 硬盘网盘U盘全部可以丢掉了,这个设备可以让你享受随身带着几个T的感受

    前言 有小伙伴问我,你怎么老写技术类文章,能不能写点别的. 其实我兴趣挺广泛的,早年还有机会做个游戏博主,可惜最近2年金盆洗手了.戒了手游,ns和ps4都在吃灰.能完整玩完的游戏屈指可数.但是对于折腾 ...