Postgresql_fdw
Postgresql_fdw
测试环境
Ubuntu 16.04 LTS云主机2台,主机名为pg1(192.168.0.34)和pg2(192.168.0.39)。
安装postgresql
下面这个源是官网提供的postgressql-9.4的源,ubuntu16.04自带postgresql-9.5的源。
PostgreSQL Apt Repository
创建文件
$ sudo touch /etc/apt/sources.list.d/pgdg.list
添加一行到文件中
$ sudo vi !$
deb http://apt.postgresql.org/pub/repos/apt/ YOUR_UBUNTU_VERSION_HERE-pgdg main
导入存储库签名秘钥,更新包列表
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
$ sudo apt-get update
这是官网使用的源,但是在apt-get更新时由于网络问题报错,最后选择ubuntu16.04 apt仓库中默认的postgresql9.5。使用下面命令进行安装:
$ sudo apt-get install postgresql-9.5
2台机器安装步骤一样。
postgresql_fdw测试
主机pg2做远程服务器
在pg2上的postgresql上建库和表:
postgres=# alter user postgres with password '';
postgres=# create database foreign_test;
postgres=# \c foreign_test
foreign_test=# create schema schema1;
foreign_test=# \dn
List of schemas
Name | Owner
---------+----------
public | postgres
schema1 | postgres
(2 rows)
foreign_test=# create table schema1.t1(id int);
foreign_test=# insert into schema1.t1 values(1);
foreign_test=# select * from schema1.t1;
id
----
1
(1 row)
在主机pg1上安装postgresql_fdw扩展
postgres=# CREATE EXTENSION postgres_fdw;
CREATE EXTENSION
创建外部服务器,连接一个主机192.168.0.39(pg2)上并且监听5432端口的postgresql的服务器,在该远程服务器上要连接的数据库名为foreign_test:
postgres=# CREATE SERVER foreign_server
postgres-# FOREIGN DATA WRAPPER postgres_fdw
postgres-# OPTIONS (host '192.168.0.39', port '', dbname 'foreign_test');
定义一个用户映射来标识远程服务器上使用哪个角色:
postgres=# CREATE USER MAPPING FOR postgres
SERVER foreign_server
OPTIONS (user 'postgres', password '');
创建外部表:
postgres=# CREATE FOREIGN TABLE foreign_table (
id integer NOT NULL
)
SERVER foreign_server
OPTIONS (schema_name 'schema1', table_name 't1');
FAQ:
postgres=# select * from foreign_table;
ERROR: could not connect to server "foreign_server"
DETAIL: could not connect to server: Connection refused
Is the server running on host "192.168.0.39" and accepting
TCP/IP connections on port 5432?
防火墙已关闭,但是报如上错误。
解决方法:
在192.168.0.39上修改postgresql的允许访问权限
$ vi /etc/postgresql/9.5/main/postgresql.conf
添加:
listen_addresses = '*' password_encryption = on
$ vi /etc/postgresql/9.5/main/pg_hba.conf
添加:
host all all 0.0.0.0 0.0.0.0 md5
重启服务:
$ /etc/init.d/postgresql restart
然后到192.168.0.34上查询:
postgres=# select * from foreign_table;
id
----
1
(1 row)
测试不同postgresql上数据源join操作
在pg2上进入foreign_test数据库:
postgres=# \c foreign_test
展示当前schema:
foreign_test=# show search_path;
切换schema:
foreign_test=# set search_path to schema1;
列出当前schema下的表:
foreign_test=# \d
在当前schema下新建表t2:
foreign_test=# create table t2(id int,name text);
往表t2中插入数据:
foreign_test=# insert into t2 values(1, 'li'),(2, 'zhao'),(3, 'qian'),(4, 'wang'),(5, 'jia');
在pg1上创建外部表:
postgres=# CREATE FOREIGN TABLE foreign_table1 (
id integer NOT NULL,
name text
)
SERVER foreign_server
OPTIONS (schema_name 'schema1', table_name 't2');
查看外部表:
postgres=# select * from foreign_table1;
id | name
----+------
1 | li
2 | zhao
3 | qian
4 | wang
5 | jia
(5 rows)
创建本地表:
postgres=# create table local_t1(id int,city text);
postgres=# insert into local_t1 values(1, 'beijing'),(2, 'shanghai'),(5, 'nanjing'),(6, 'lanzhou');
postgres=# select * from local_t1;
id | city
----+----------
1 | beijing
2 | shanghai
5 | nanjing
6 | lanzhou
(4 rows)
测试远程postgresql和本地postgresql的join操作
postgres=# select * from local_t1 join foreign_table1 on local_t1.id = foreign_table1.id;
id | city | id | name
----+----------+----+------
1 | beijing | 1 | li
2 | shanghai | 2 | zhao
5 | nanjing | 5 | jia
(3 rows)
postgres=# select * from local_t1 left join foreign_table1 on local_t1.id = foreign_table1.id;
id | city | id | name
----+----------+----+------
1 | beijing | 1 | li
2 | shanghai | 2 | zhao
5 | nanjing | 5 | jia
6 | lanzhou | |
(4 rows)
postgres=# select * from local_t1 right join foreign_table1 on local_t1.id = foreign_table1.id;
id | city | id | name
----+----------+----+------
1 | beijing | 1 | li
2 | shanghai | 2 | zhao
| | 3 | qian
| | 4 | wang
5 | nanjing | 5 | jia
(5 rows)
参考网址:http://www.postgres.cn/docs/9.6/postgres-fdw.html
欢迎加入大数据与AI交流QQ群一起学习:572703882
Postgresql_fdw的更多相关文章
- Postgresql_fqw
Postgresql_fqw 测试环境 Ubuntu 16.04 LTS云主机2台,主机名为pg1(192.168.0.34)和pg2(192.168.0.39). 安装postgresql 下面这个 ...
- clickhouse 19.14.m.n简单测试
ClickHouse is a column-oriented database management system (DBMS) for online analytical processing o ...
- PG-跨库操作-dblink
在PostgreSQL数据库之间进行跨库操作的方式 dblink postgres_fdw 本文先说说dblink:dblink是一个支持从数据库会话中连接到其他PostgreSQL数据库的插件.在其 ...
- Kingbase_FDW 使用介绍
与postgresql_fdw功能类似,KINGBASE_FDW 是一种外部访问接口,它可以被用来访问存储在外部的数据.想要使用fdw访问数据需要先确保:网络通,数据库访问配置(pg_hba,con ...
随机推荐
- ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...
- PHP trait 特性在 Laravel 中的使用个人心得
trait 是在PHP5.4中为了方便代码复用的一种实现方式,但目前我在看的的PHP项目中较少看的有程序员去主动使用这个实现方式,在laravel中有很多 trait 的使用,关于trait 在 la ...
- SimpleMembershipProvider 的 MySql 实现
认 证我一直用的是微软的 Membership 体系,看 MySql 也实现了对应的 Provider,在新建立了一个 MVC4 项目后,把 Provider 一改就直接启动,然后就出错了.异常是“T ...
- Linux日志系统
常见的日志 常见的日志一般存储在/var/log中.常见的日志查看使用:ls/ll,cat/more/less查看即可:wtmp,lastlog使用last和lastlog提取其信息即可 配置日志 较 ...
- NUMA 架构
NUMA架构的CPU -- 你真的用好了么? - http://cenalulu.github.io/linux/numa/ SQL Server 如何支持 NUMA - https://docs.m ...
- 谷歌推出全新Android开发语言Sky:让App更流畅
土豆网同步更新:http://www.tudou.com/plcover/VHNh6ZopQ4E/ 使用HTML 创建Mac OS App 视频教程. 官方QQ群: (1)App实践出真知 434 ...
- 基于Delphi实现客户端服务端通信Demo
在开始之前我们需要了解下这个Demo功能是啥 我们可以看到这是两个小project,左边的project有服务端和客户端1,右边的project只有一个客户端2 效果就是当两个客户端各自分别输入正确的 ...
- VMware 克隆linux后找不到eth0(学习hadoop,所以想快速搭建一个集群)
发生情况: 由于在学习hadoop,所以想快速搭建一个集群出来.所以直接在windows操作系统上用VMware安装了CentOS操作系统,配置好hadoop开发环境后,采用克隆功能,直接克 ...
- 似乎是VS2017的一个BUG
VS版本:2017(15.9.13) 新建一个c#控制台项目,把Program.cs的内容替换成如下: namespace ConsoleApp1 { class Program { static v ...
- 平衡二叉树 JAVA实现 亲测可用
平衡二叉树的JAVA实现 亲测可用 包括LL LR RL RR四种情况的旋转算法 以及添加删除树结点之后对平衡二叉树的维护算法 都已经实现并测试过 没有问题. 代码地址可以直接上我的GIT clone ...