彩神大发快三_神彩大发快三官方

PostgreSQL的远程数据操作

时间:2020-03-12 07:42:11 出处:彩神大发快三_神彩大发快三官方

-------

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

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

music=# delete from manid;

                                              QUERY PLAN                                              

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

-------

(1 行记录)

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

配置内外部表,相关信息:

  300

 count 

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

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

postgres=# create database musician;

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

                                                QUERY PLAN                                                

 Execution time: 44.411 ms

 Execution time: 64.936 ms

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

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

(3 rows)

music=> refresh materialized view mv_manid;

 Execution time: 1.363 ms

(1 row)

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

host    all           all            192.168.1.0/24              md5

注意:

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

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

music=> explain analyze select * from mv_manid;

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

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

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

 Planning time: 12.30 ms

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

(1 row)

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

INSERT 0 30

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

 count 

最终另一个多 多修改的:

-------

数据已完正清除。

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

(1 行记录)

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

                                                  QUERY PLAN                                                   

                                                   QUERY PLAN                                                   

(3 rows)

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

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

 public   | man  | 资料表 | eric

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

(3 行记录)

  注意,不论使用PG的哪种内外部数据包装器,尽机会的保证两端的表中字段的数量、类型和顺序一致,否则机会因为着好多好多 问题报告 。

本地用户:eric

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

music=> \c music postgres

机会对响应速率单位有相对较高的要求,则时需使用另并就有武器:物化视图。

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

对象名称:musician_fdw_server

内外部表在本库的名称:manid

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

数据是还都可以 看一遍了,性能怎么才能 才能 呢?我们歌词 我们歌词 我们歌词 儿来测试一下:

-------

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

 count 

 count 

 count 

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

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

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

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

CREATE SERVER

 Planning time: 0.067 ms

                                                     QUERY PLAN                                                     

测试环境准备:

                                                 QUERY PLAN                                                 

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

CREATE FOREIGN TABLE

 Execution time: 18.758 ms

CREATE USER MAPPING

看起来差别还是比较明显的,更别提用到量大且僵化 的生产环境中了。机会是该查询用的不频繁否则查询的量不大不僵化 ,客户也还都可以 忍受响应速率单位,那另一个多 多就OK。

  300

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

 Planning time: 0.036 ms

CREATE TABLE

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

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

(4 行记录)

端口号:5432

比manid的强不少吧?~~~

             关联列表

musician=> create table man(id bigint);

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

 Planning time: 0.254 ms

 Planning time: 0.045 ms

INSERT 0 300

 300

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

(4 rows)

DELETE 300

music=> \c music postgres

 300

内外部表名:man

musician=> select count(*) from man;

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

内外部服务器:musician_fdw_server

music=# select count(*) from manid;

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

music=> \c music postgres

机会远程连接一句话,PG要求是时需有密码验证的,设置成trust一句话会报错。

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

music=# \c musician eric

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

# IPv4 local connections:

INSERT 0 300

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

music=> explain analyze select * from manid;

 Execution time: 2.864 ms

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

 count 

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

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

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

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

musician=> select count(*) from man;

-------

music=> \c music eric

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

内外部服务器对象:musician_fdw_server

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

主机IP:192.168.1.129

看起来差别就有越来越来越多,否则测试的数据量和类型好多好多 僵化 ,另一个多 多们接下来换一根一句话:

(1 行记录)

下面我们歌词 我们歌词 我们歌词 儿来体验一下该功能:

 300

CREATE EXTENSION

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

CREATE DATABASE

(1 row)

postgres=# create extension postgres_fdw;

-------

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

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

 Foreign Scan on manid  (cost=30.00..186.30 rows=2530 width=8) (actual time=14.445..30.194 rows=300 loops=1)

-------

  300

 Execution time: 26.189 ms

(4 rows)

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

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

musician=> \d

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

REFRESH MATERIALIZED VIEW

musician=> select count(*) from man;

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

(1 行记录)

 Planning time: 0.032 ms

music=> select count(*) from mv_manid;

musician=> insert into man select * from generate_series(301,300);

(1 行记录)

musician=> select count(*) from man;

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

musician=> explain analyze select * from man;

music=> select count(*) from mv_manid;

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

OK!~

 count 

热门

热门标签