PostgreSQL的远程数据操作

  • 时间:
  • 浏览:0
  • 来源:5分3DAPP下载_5分3DAPP官网

查看一下物化视图的性能怎样才能:

music=# create foreign table manid(id bigint) server musician_fdw_server options(table_name 'man');

postgres=# create database musician;

------------------------------------------------------------------------------------------------------------

music=> create materialized view mv_manid as select * from manid;

 count 

music=# create server musician_fdw_server foreign data wrapper postgres_fdw options (host '192.168.1.129',dbname 'musician',port '5432');

下面亲戚我们都 来体验一下该功能:

CREATE EXTENSION

刷新一下本地的物化视图即可看一遍新进来的数据:

                                              QUERY PLAN                                              

(1 行记录)

 Planning time: 12.100 ms

----------------------------------------------------------------------------------------------------------

本地数据库本地执行得话:

在远程数据库表里插入新数据:

创建用户映射,相关信息:

musician=> explain analyze select * from man;

musician=> insert into man select * from generate_series(1001,1000);

 Execution time: 1.363 ms

在本地数据库创建物化视图:

                                                   QUERY PLAN                                                   

musician=> insert into man select * from generate_series(1,1000);

(4 行记录)

music=> \c music postgres

musician=> select count(*) from man;

-------

从本地删除远程数据库musician中表man的所有数据:

  1000

   ->  Seq Scan on man  (cost=0.00..116.00 rows=1000 width=0) (actual time=0.014..13.068 rows=1000 loops=1)

 count 

-------

将会远程连接得话,PG要求是需用有密码验证的,设置成trust得话会报错。

INSERT 0 1000

music=> explain analyze select count(*) from manid;

# IPv4 local connections:

 count 

You are now connected to database "music" as user "postgres".

 Planning time: 0.036 ms

host    all           all            192.168.1.0/24              md5

   ->  Seq Scan on mv_manid  (cost=0.00..113.04 rows=7704 width=0) (actual time=0.010..0.738 rows=1000 loops=1)

 count 

musician=> explain analyze select count(*) from man;

You are now connected to database "music" as user "postgres".

 Aggregate  (cost=136.00..136.01 rows=1 width=0) (actual time=26.128..26.129 rows=1 loops=1)

   ->  Foreign Scan on manid  (cost=100.00..212.39 rows=3413 width=0) (actual time=2.264..41.813 rows=1000 loops=1)

本地用户:eric

                                                  QUERY PLAN                                                   

外部表名:man

 Planning time: 0.067 ms

musician=> \d

(1 row)

music=# select count(*) from manid;

music=#  create user mapping for eric  server musician_fdw_server options (user 'eric',password 'gao');

-------

在远程数据库中看一遍1万条数据已入账:

music=> \c music eric

 Planning time: 0.032 ms

测试环境准备:

REFRESH MATERIALIZED VIEW

您现在将会连线到数据库 "musician",用户 "eric".

 Seq Scan on mv_manid  (cost=0.00..113.04 rows=7704 width=8) (actual time=0.024..1.823 rows=1000 loops=1)

music=# \c musician eric

数据是能要能看一遍了,性能怎样才能呢?亲戚我们都 来测试一下:

设置完成时候 验证一下查询效果:

----------------------------------------------------------------------------------------------------------------

 Seq Scan on man  (cost=0.00..116.00 rows=1000 width=8) (actual time=0.012..10.277 rows=1000 loops=1)

music=> explain analyze select * from manid;

比manid的强不少吧?~~~

 Planning time: 0.045 ms

在远程数据库本地执行得话:

(3 rows)

物化视图需用对表进行刷新要能同步远程表的数据:

创建外部服务器对象,需用指定相关信息:

(1 row)

-------

 Aggregate  (cost=220.92..220.93 rows=1 width=0) (actual time=42.1004..42.1004 rows=1 loops=1)

CREATE FOREIGN TABLE

PostgreSQL提供了外部数据包装器postgres_fdw,作用跟dblink相同,即查询远程数据库中的数据信息,但会 postgres_fdw比dblink在什么都有有场景更稳定、更方便。并肩PostgreSQL也提供对什么都有有数据库如Oracle和MySQL等数据库的外 部数据包装器:oracle_fdw和mysql_fdw,可查询Oracle和MySQL数据库中的相关表信息。

 public   | man  | 资料表 | eric

看起来差别还是比较明显的,更别提用到量大且僵化 的生产环境中了。将会是该查询用的不频繁但会 查询的量不大不僵化 ,客户要能要能忍受响应效率,那另有有一个 就OK。

You are now connected to database "music" as user "postgres".

外部服务器对象:musician_fdw_server

CREATE TABLE

music=> select count(*) from mv_manid;

注意:

INSERT 0 100

CREATE DATABASE

远程数据库用户名密码:eric,gao

OK!~

 1000

 Execution time: 26.189 ms

-------

 架构模式 | 名称 |  型别  | 拥有者 

对象名称:musician_fdw_server

外部表在本库的名称:manid

在本地测试库安装插件postgres_fdw:

  1000

 count 

包装器类型:postgres_fdw,将会要连接Oracle将会MySQL数据库得话,可用oracle_fdw或mysql_fdw

------------------------------------------------------------------------------------------------------

在远程数据库执行查询数据条目:

  在远程数据库的pg_hba.conf中修改一下相关的配置:

最终另有有一个 修改的:

 1000

             关联列表

端口号:5432

数据库名称:musician(时候 创建的数据库名)

music=# delete from manid;

外部服务器:musician_fdw_server

                                                 QUERY PLAN                                                 

 Execution time: 18.758 ms

(3 行记录)

--------------------------------------------------------------------------------------------------------------------

物化视图名称为:mv_manid,通过该视图保存manid表能查到的数据的实体:

---------------------------------------------------------------------------------------------------------------

(1 行记录)

 count 

 Planning time: 0.254 ms

musician=> select count(*) from man;

 1000

music=# insert into manid select * from generate_series(1,1000);

  注意,不论使用PG的哪种外部数据包装器,尽将会的保证两端的表中字段的数量、类型和顺序一致,但会 将会原应什么都有难题。

CREATE USER MAPPING

(3 rows)

musician=> select count(*) from man;

  1000

music=> refresh materialized view mv_manid;

在本地数据库本地执行得话:

musician=> select count(*) from man;

(4 rows)

将会对响应效率有相对较高的要求,则需用使用另这种武器:物化视图。

(1 row)

配置外部表,相关信息:

postgres=# create extension postgres_fdw;

music=> \c music postgres

 Aggregate  (cost=132.100..132.31 rows=1 width=0) (actual time=1.336..1.336 rows=1 loops=1)

物化视图能要能理解为是对目标表格的有有一个 副本,将会是一模一样的,也将会是经过筛选的。本次咱们为了改善性能,简单的创建有有一个 跟远程数据库表格一模一样的物化视图:

DELETE 1000

(4 rows)

(1 行记录)

                                                QUERY PLAN                                                

远程数据库本地执行得话:

CREATE SERVER

看起来差别就有很多,但会 测试的数据量和类型要是我僵化 ,另有有一个 们接下来换根小得话:

数据已删改清除。

 count 

本地库查询发现还是8千条数据:

musician=> create table man(id bigint);

(1 行记录)

-------

(1 行记录)

 Execution time: 44.411 ms

music=> explain analyze select count(*) from mv_manid;

主机IP:192.168.1.129

在远程数据库上创建新的数据库musician,并在库里创建表man,插入测试数据:

You are now connected to database "music" as user "postgres".

INSERT 0 1000

----------+------+--------+--------

music=> explain analyze select * from mv_manid;

 Foreign Scan on manid  (cost=100.00..186.100 rows=25100 width=8) (actual time=14.445..100.194 rows=1000 loops=1)

从本地向远程数据库musician中的表man插入1万条数据:

 Execution time: 64.936 ms

验证一下删除和插入操作:

SELECT 1000   ---数据条目跟刚才一样为8千条

music=> \c music postgres

music=> select count(*) from mv_manid;

 Execution time: 2.864 ms

-------

                                                     QUERY PLAN                                                     

猜你喜欢

我刚办了张工商银行卡,到淘宝网上买东西,但要开通网上银行付款,该怎么做呢?

展开完整篇 本回答由前前老外见面推荐带上身份证和银行卡亲自去柜面办理网银。带上我每每个人身份证和银行卡到银行去办理网银,提醒一下,网银有U盾、电子密码器和口令卡有一种,根据我

2020-02-19

中行网银怎么在网上注册

毕业于青岛农业大学海都学院学士学位有三年网络工作经验首次登录要下载安全控件,扫描二维码下载二、另有本身是具有多种功能的网上银行前要在银行柜台开通才不用 使用,在银行开办网

2020-02-19

网银到底有用吗?在淘宝上买东西直接快捷支付就可以了,还要网银干嘛

网银安全换一换收起更多回答(3)展开完全展开完全为什会 可能没法 用,许多不要再支付宝的网购是需要网银的你对这个 回答的评价是?你对这个 回答的评价是?你对这个

2020-02-18

招商银行网上银行怎么开通

为你推荐:展开删剪招商银行成立于1987年,目前已发展成为了资本净额超过3500亿、资产总额超过4.十五万亿、全国设有超过150家网点、员工超过十五万人的全国性股份制商业银行,

2020-02-18

是不是银行卡没有开通网银就不能支付宝转账

以在手机上用支付宝钱包转账为例,具体转账步骤如下:3、输入收款人姓名、卡号、银行名称、转账金额、挑选付款辦法 ,这里挑选绑定支付宝的没开通网银的那张银行卡支付,怎么让点下一步

2020-02-18