2019独角兽企业重金招聘Python工程师标准>>>

这周postgresql发布了9.3正式版,该版本包含可写的外部数据封装、数据页 checksums、快速的故障转移以及 streaming-only remastering 等等。很荣幸,公司第一时间让我试下外部数据分装可写的这个功能。原来postgresql 9提供可远程读取数据库的功能,现在正是加入远程可写。所以通过fdw(Foreign Data Wrappers),简单讲可以让我们在本地数据库操作远程数据库了。这和之前介绍的dblink有相似之处,但是fdw提供更多透明和标准的语法,而且性能也比dblink好。

第一步:安装postgres_fdw扩展

postgres=# create extension postgres_fdw;

如果提示“CREATE EXTENSION”,说明安装成功。

第二步:创建远程数据库服务器

01 //先在远程数据库vm05中新建数据库zhang和数据表world。
02  
03 postgres=# create database zhang ;
04  
05 postgres=# \c zhang
06  
07 zhang=# create table world (greeting text) ;
08  
09 //然后psql登陆本地数据库创建vm05-zhang
10  
11 postgres=# create server vm05_zhang foreign data wrapper postgres_fdw options (host '192.168.0.235',dbname 'zhang',port '3500') ;

create server命令语法:

CREATE SERVER server_name [ TYPE 'server_type' ] [ VERSION 'server_version' ] FOREIGN DATA WRAPPER fdw_name [ OPTIONS ( option 'value' [, ... ] ) ]

server_name:远程数据库的名称,在一个数据库中必须是唯一的。

server_type、server_version:可选,可能对一些外部数据封装有用。

fdw_name:外部数据分装名字,这里我们是postgres_fdw。

options:其他可选参数,包括数据库地址,数据库名称和端口等。

第三步:创建映射用户

CREATE USER MAPPING指定连接远程数据库的用户,这些数据和创建的foreign server远程服务器一起被封装起来。拥有foreign server权限的用户可以创建映射用户。

1 postgres=# create user mapping FOR PUBLIC server vm05_zhang options (password 'xxx') ;

create user mapping命令语法:

CREATE USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC }
SERVER server_name
[ OPTIONS ( option 'value' [ , ... ] ) ]

user_name:现有的用户映射到远程server。USER和CURRENT_USER匹配当前的用户,没有特定用户可用就可以选择PUBLIC。

server_name:当前需要用户映射到的远程数据库服务器名,第二步已经创建。

options:其他可选像,包括用户名、密码等。

例如:CREATE USER MAPPING FOR bob SERVER foo OPTIONS (user ‘bob’, password ‘secret’);

第四步:创建远程表

这里需要注意,创建表的列要和远程表的列要匹配,类型最好是一样。远程表的列可以少些,顺序可以不重要,因为fdw是根据名字来匹配的。

1 postgres=# create foreign table vm05_world (greeting text) server vm05_zhang options (table_name 'world') ;

第五步:查看效果

01 //在vm05_world表中插入三条数据
02  
03 postgres=# insert into vm05_world values ('Take me to your leader') ;
04  
05 postgres=# insert into vm05_world values ('Take me to your leader.........') ;
06  
07 postgres=# insert into vm05_world values ('Hello World!!!!!') ;
08  
09 //查看vm05_world表中数据
10  
11 postgres=# select * from vm05_world ;
12  greeting
13 ---------------------------------
14  Take me to your leader
15  Take me to your leader.........
16  Hello World!!!!!
17 (3 rows)
18  
19 //其实这个是在vm05这台服务器上,我们登陆vm05查看是否有数据。
20  
21 zhang=# select * from world ;
22  greeting
23 ---------------------------------
24  Take me to your leader
25  Take me to your leader.........
26  Hello World!!!!!
27 (3 rows)

可以看到插入数据成功,当然我们也可以在update和delete from表vm05_world ,如果映射的用户有这个权限的话。

至此postgres_fdw外部数据封装可写正式测试完成,对于操作多张表很有用。总结的比较粗浅,还有不明白的可以参考postgresql的官方文档:

https://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.3#Writeable_Foreign_Tables

原文链接:http://www.sijitao.net/1434.html

转载于:https://my.oschina.net/u/270810/blog/170834

Postgresql 9.3外部数据封装的新功能相关推荐

  1. postgresql 集合类型_PostgreSQL 分组集合新功能(GROUPING SETS,CUBE,ROLLUP)

    PostgreSQL 分组集合新功能(GROUPING SETS,CUBE,ROLLUP) 实验环境 操作系统:windows 10 家庭中文版 数据库系统: PostgreSQL 9.6.2 说明 ...

  2. PostgreSQL 12:新功能和增强功能

    目录 介绍 新功能和增强功能 CTE增强 生成列 重新索引改进 默认情况下启用JIT编译 查询并行性改进 PL/pgSQL增强 SQL / JSON路径查询 分区改进 拼写改进 MCV统计信息现在支持 ...

  3. vSphere 6.5 新功能 (1) - 全功能 vCenter S

    首先来澄清一个概念,vSphere 产品包括两个组件:VMware ESXi 和 VMware vCenter Server.ESXi 就是运行虚拟机的虚拟化平台,也就是通常所说的 Hyperviso ...

  4. 亚马逊云科技2022年6月新服务新功能回顾

    前言 从计算.存储和数据库等基础设施技术,到机器学习.人工智能.数据湖和分析以及物联网等新兴技术,亚马逊云科技为客户提供多样的服务及功能.借助亚马逊云科技,您可以在种类繁多的前沿技术中选择适合您工作负 ...

  5. 001 spring5框架:java类工程,IOC:实体类表示表关系,AOP,JdbcTemplate模板,事务操作,Spring5 框架新功能:日志,为空注解,函数式风格,juint,Webflux

    1. Spring5 框架(Spring5 Framework)介绍 1.1 概念 1.Spring 是轻量级的开源的 JavaEE 框架 2.Spring 可以解决企业应用开发的复杂性 3.Spri ...

  6. MyBatis Generator中的新功能

    版本1.3.5 请参阅GitHub页面的里程碑1.3.5,了解本版本中发生了什么变化.里程碑1.3.5 版本1.3.4 在这个版本中,我们已经弃用了eclipse插件中的弹出菜单项,用于运行MyBat ...

  7. MaxCompute2.0新功能介绍

    摘要:在过去的两年内,MaxCompute进行了翻天覆地的重构,从1.0版本全面升级到了2.0版本.而大家或许对于MaxCompute 2.0的一些新特性并不了解,在本文中,MaxCompute技术专 ...

  8. html5在哪编译,HTML5_提供的 新功能_less 编译_

    HTML5_提供的 新功能 class 操作 ele.classList(注意: 高版本的 IE 都不支持) 获取 ele.classList.add("current"); el ...

  9. python3.7和3.8的区别-Python 3.8 新功能来一波(大部分人都不知道)

    Python 是一门广受好评的编程语言,每个版本的更新都会对开发社区带来一定影响.近日,Python 3.8 已进入 beta 2 版本的测试中,各项新特性已经添加完毕,最终版本预计于今年 10 月发 ...

最新文章

  1. uploadify多文件上传插件
  2. 一口气拿到了 8 个 Offer,我该怎么选择?
  3. Win-MASM64汇编语言-CMP/CMPSB/CMPSW/CMPSD/JNE/JCXZ
  4. 茅台少女踩曲玄机何在?
  5. [转] ubuntu开启SSH服务
  6. C语言程序设计(第四版)谭浩强 清华 【2000】
  7. 软件测试加油站ic卡管理系统,加油站IC卡管理系统,加油机IC卡管理系统,加油站自助加油机功能介绍...
  8. 用注册机破解navicat12
  9. VARCHART XGantt与活动互动教程指南
  10. git使用时报错:fatal: unable to access ‘xxx‘ : Failed to connect to github.com port 443 after: 【Time out】
  11. ie 验证码图片不显示解决
  12. 什么是bug(软件缺陷)
  13. 《封号码罗》python爬虫之企某科技网站js逆向(十四)
  14. python识别图片中的二维码_python3+pyzbar+Image 进行图片二维码识别
  15. ABAC权限模型的设计
  16. JS实现网站声音提示,兼容IE与chrome,附谷歌chrome浏览器无法自动播放声音解决方法
  17. Windows经典播放器Winamp回归 功能界面迎来全新改革
  18. 服务器、计算机、工作站三者的区别
  19. php-cs-fixer实践
  20. ubuntu12.04打字软件

热门文章

  1. Java基础篇:如何嵌套try语句?
  2. Android 四种启动模式
  3. Java的Redis连接池代码
  4. 12、Linux一级子目录学习
  5. python中的ord,chr函数
  6. ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
  7. 【廖雪峰官方网站/Java教程】设计模式(二)
  8. 完全二叉树的结点数计算
  9. MFC中子类调用父类成员
  10. 如何设置 Web 服务器的权限之iis