uu快3下载安装_uu快3注册邀请码_手机版ios

PostgreSQL的远程数据操作

时间:2020-02-27 17:11:43 出处:uu快3下载安装_uu快3注册邀请码_手机版ios

 count 

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

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

  注意,不论使用PG的哪种结构数据包装器,尽可能的保证两端的表中字段的数量、类型和顺序一致,否则可能原因分析分析其他大问题。

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

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

-------

本地用户:eric

 count 

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

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

INSERT 0 300000

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

 300000

 count 

主机IP:192.168.1.129

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

music=> \c music eric

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

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

music=> \c music postgres

music=> \c music postgres

-------

CREATE SERVER

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

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

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

(3 rows)

可能对响应速率单位有相对较高的要求,则必须使用另这种 武器:物化视图。

(3 rows)

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

(3 行记录)

 300000

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

比manid的强不少吧?~~~

数据已完整版清除。

                                                 QUERY PLAN                                                 

-------

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

# IPv4 local connections:

(1 行记录)

music=> explain analyze select * from manid;

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

(1 行记录)

物化视图必须对表进行刷新还可以 同步远程表的数据:

music=# delete from manid;

结构服务器:musician_fdw_server

 Execution time: 44.411 ms

 Planning time: 0.032 ms

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

musician=> explain analyze select * from man;

 count 

看起来差别都有不多,否则测试的数据量和类型并且复杂,曾经们接下来换一根绳子 一段话:

PostgreSQL提供了结构数据包装器postgres_fdw,作用跟dblink相同,即查询远程数据库中的数据信息,否则 postgres_fdw比dblink在其他场景更稳定、更方便。一块儿PostgreSQL也提供对其他数据库如Oracle和MySQL等数据库的外 部数据包装器:oracle_fdw和mysql_fdw,可查询Oracle和MySQL数据库中的相关表信息。

host    all           all            192.168.1.0/24              md5

(1 行记录)

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

-------

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

结构表在本库的名称:manid

(1 row)

music=> refresh materialized view mv_manid;

包装器类型:postgres_fdw,可能要连接Oracle可能MySQL数据库一段话,可用oracle_fdw或mysql_fdw

musician=> select count(*) from man;

-------

musician=> select count(*) from man;

music=# \c musician eric

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

(1 行记录)

DELETE 300000

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

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

结构服务器对象:musician_fdw_server

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

(1 行记录)

musician=> insert into man select * from generate_series(300001,300000);

music=# select count(*) from manid;

music=> select count(*) from mv_manid;

(4 rows)

 Planning time: 12.300 ms

 count 

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

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

music=> select count(*) from mv_manid;

结构表名:man

INSERT 0 30000

 Execution time: 1.363 ms

  300000

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

 count 

musician=> select count(*) from man;

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

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

                                                     QUERY PLAN                                                     

musician=> create table man(id bigint);

 Planning time: 0.036 ms

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

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

 300000

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

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

 count 

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

CREATE USER MAPPING

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

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

musician=> select count(*) from man;

postgres=# create extension postgres_fdw;

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

(4 行记录)

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

(1 row)

远程数据库本地执行一段话:

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

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

在本地数据库本地执行一段话:

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

-------

可能远程连接一段话,PG要求是必须有密码验证的,设置成trust一段话会报错。

配置结构表,相关信息:

端口号:5432

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

CREATE EXTENSION

CREATE TABLE

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

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

 Execution time: 2.864 ms

INSERT 0 300000

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

 Planning time: 0.045 ms

(1 row)

                                                   QUERY PLAN                                                   

本地数据库本地执行一段话:

music=> \c music postgres

数据是还可以 看完了,性能怎样才能呢?其他人来测试一下:

postgres=# create database musician;

musician=> \d

看起来差别还是比较明显的,更别提用到量大且复杂的生产环境中了。可能是该查询用的不频繁否则查询的量不大不复杂,客户能不还可以 忍受响应速率单位,那曾经就OK。

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

                                                  QUERY PLAN                                                   

music=> explain analyze select * from mv_manid;

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

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

  300000

 Execution time: 18.758 ms

测试环境准备:

最终曾经修改的:

创建结构服务器对象,必须指定相关信息:

 Execution time: 26.189 ms

             关联列表

 public   | man  | 资料表 | eric

对象名称:musician_fdw_server

(4 rows)

下面其他人来体验一下该功能:

CREATE DATABASE

 Execution time: 64.936 ms

  300000

注意:

                                              QUERY PLAN                                              

-------

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

 Foreign Scan on manid  (cost=3000.00..186.3000 rows=25300 width=8) (actual time=14.445..300.194 rows=300000 loops=1)

OK!~

 Planning time: 0.254 ms

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

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

                                                QUERY PLAN                                                

CREATE FOREIGN TABLE

REFRESH MATERIALIZED VIEW

 Planning time: 0.067 ms

热门

热门标签