# Postgresql
# 表的继承
# 1. 继承
第一张表 | |
create table cities(-- 父表 | |
name text, | |
population float, | |
altitude int | |
) | |
第二张表 | |
create table capital(-- 子表 | |
state char(2) | |
)inherits(cities) | |
插入数据 | |
insert into cities values('Las Vegas',1.53,2174) | |
insert into cities values('Marposa',3.30,1953) | |
insert into capital values('Madison',4.34,845,'WI') | |
从父表中查询所有数据,结果集包括父子表中所有数据,如果只想查询父表中数据需要在表名前加上only关键字 | |
从子表中查询所有数据,结果集只有子表中数据 |
# 2. 确定数据来源
在所有的表中国都有隐含字段 tableoid, 通过这个可以知道表的来源
如果需要看实际的表名需要和系统表 pg_class 进行关联,通过 tableoid 获取表名
# 3. 数据插入注意事项
继承不会自动从 insert 或者 copy 中想继承级中的表填充数据。以下的 insert 语句不会成功:
# 4. 多表继承
一个表可以从多个父表继承,这种情况下子表拥有父表们的所有数据,其中包括父表的所有字段和子表的字段。如果同一字段名出现在多个父表中,或者同时出现在父表和子表中,那么这些字段就会被合并,这样只会有一个同名字段,合并的前提是数据类型相同,否则会抛出异常。被合并的字段会拥有它继承的所有约束.
# 表的分区
# 1. 分区的概念
把逻辑上的一个大表分割成物理是哪个的大块,分区的优点是:
- 某些类型的查询性能得到极大的提升.
- 更新的性能也可以得到提升,以为表的每块的索引要比在数据集的索引要小。如果索引不能全部都在内存中,那么索引上的读和写都会产生更多的磁盘访问.
- 批量删除可以用删除某个分区来实现.
- 将冷数据存放到便宜,存储性能低的介质上