注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL9.5:Foreign Table Inheritance  

2015-07-31 11:32:41|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


         上篇 blog 介绍了外部表模式的导入,详见 PostgreSQL9.5: IMPORT FOREIGN SCHEMA   ,9.5 版本还支持外部表继承本地表,也支持本地表继承外部表,这篇博客演示外部表继承本地表。
 
--1 外部表 test_1

[pg95@db1 ~]$ psql fdb fdb
psql (9.5alpha1)
Type "help" for help.

fdb=> \dE test_1
            List of relations
 Schema |  Name  |     Type      | Owner
--------+--------+---------------+-------
 fdb    | test_1 | foreign table | fdb
(1 row)

fdb=> select count(*) from test_1;
  count  
---------
 3000000
(1 row)

备注: fdb 库中已有表名为 test_1 的外部表。

--2 创建本地表 test_master

fdb=> create table test_master ( like test_1 including all ) ;
CREATE TABLE

fdb=> ALTER TABLE test_1 INHERIT test_master;
ALTER TABLE

fdb=> \d+ test_master
                       Table "fdb.test_master"
 Column |  Type   | Modifiers | Storage  | Stats target | Description
--------+---------+-----------+----------+--------------+-------------
 id     | integer |           | plain    |              |
 name   | text    |           | extended |              |
Child tables: test_1


fdb=> select count(*) from test_master;
  count  
---------
 3000000
(1 row)

备注: 创建本地表 test_master,并让 test_master 继承外部表 test_1。

--3 在本地表 test_master 插入一条数据

fdb=> insert into test_master(id,name) values (1,'master');
INSERT 0 1

fdb=> select * from test_master where id=1;
 id |  name  
----+--------
  1 | master
  1 | 1a
(2 rows)

fdb=> select count(*) from test_master;
  count  
---------
 3000001

fdb=> select tableoid::regclass, * from test_master where id=1;
  tableoid   | id |  name  
-------------+----+--------
 test_master |  1 | master
 test_1      |  1 | 1a
(2 rows)


--4 查看执行计划

fdb=> explain analyze select tableoid::regclass, * from test_master where id=1;
                                                     QUERY PLAN                                                      
---------------------------------------------------------------------------------------------------------------------
 Result  (cost=0.00..128.71 rows=7 width=40) (actual time=0.034..0.816 rows=2 loops=1)
   ->  Append  (cost=0.00..128.71 rows=7 width=40) (actual time=0.031..0.810 rows=2 loops=1)
         ->  Seq Scan on test_master  (cost=0.00..2.59 rows=1 width=40) (actual time=0.029..0.031 rows=1 loops=1)
               Filter: (id = 1)
         ->  Foreign Scan on test_1  (cost=100.00..126.12 rows=6 width=40) (actual time=0.772..0.773 rows=1 loops=1)
 Planning time: 0.252 ms
 Execution time: 1.520 ms
(7 rows)

备注:外部表的继承用法为 PostgreSQL 的分片方案提供了思路,有兴趣的同学可以看看下面这篇通过外部表扩展的博客。

--5 参考
  评论这张
 
阅读(708)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016