# 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关键字
从子表中查询所有数据,结果集只有子表中数据

image

image-20211026132512191

# 2. 确定数据来源

在所有的表中国都有隐含字段 tableoid, 通过这个可以知道表的来源

image-20211026132736807

如果需要看实际的表名需要和系统表 pg_class 进行关联,通过 tableoid 获取表名

image-20211026141018363

# 3. 数据插入注意事项

继承不会自动从 insert 或者 copy 中想继承级中的表填充数据。以下的 insert 语句不会成功:

image-20211026142710675

# 4. 多表继承

一个表可以从多个父表继承,这种情况下子表拥有父表们的所有数据,其中包括父表的所有字段和子表的字段。如果同一字段名出现在多个父表中,或者同时出现在父表和子表中,那么这些字段就会被合并,这样只会有一个同名字段,合并的前提是数据类型相同,否则会抛出异常。被合并的字段会拥有它继承的所有约束.

image-20211026143206169

# 表的分区

# 1. 分区的概念

把逻辑上的一个大表分割成物理是哪个的大块,分区的优点是:

  1. 某些类型的查询性能得到极大的提升.
  2. 更新的性能也可以得到提升,以为表的每块的索引要比在数据集的索引要小。如果索引不能全部都在内存中,那么索引上的读和写都会产生更多的磁盘访问.
  3. 批量删除可以用删除某个分区来实现.
  4. 将冷数据存放到便宜,存储性能低的介质上