`

Postgre数据库常用特性

 
阅读更多

每个表有如下几个内置的列:

oid tableoid xmin cmin xmax cmax ctid

其中:tableoid xmin cmin xmax cmax ctid这几列是一定会有的,用户不能使用他们来作为列名,而oid却是可以用来作为列名的,前提是要将表定义为非oid表:

WITH (

  OIDS = FALSE

)

如果该表所继承的表中,有任何一个表有OID,则该表将被强制使用OID,而不管SQL中的关于OID的定义;

 

推荐禁用OID(推荐使用一个serial类型的列作为主键),有几个好处:

1、可以节省计算PID的CPU开销,以及磁盘上的IO开销(虽然节省的不是很多)

2、OID是一个32或者64位的一个计数器,当到达其可以表示的最大值后,又会循环重新从0开始计数,这样会导致产生重复的值,使其违反了唯一标识某一行的初衷

但是如果你没有在表上定义主键,则建议开启,并且在其上创建唯一性索引(避免因为计数超过了其能够表示的最大值,然后循环回来产生重复值)这样它可以保证表上始终有一个唯一性的主键,这样可以在一些场合中利用这个唯一主键值提高性能

 

一个表的列数不能超过1600.

 

可以定义一个组合类型:

create type t_rank as(

 "salary" double precision, "level"       smallint

);

 

然后,基于这个组合类型,定义一个表:

create table testdbschema1.employee of t_rank;

但是这种基于自定义类型的表,是不能再自定义列了,其列将完全依照类型的定义;

 

 

查询组合类型:

select * from pg_type where typtype = 'c' and typarray > 0 

AND typname NOT IN (SELECT TABLE_NAME FROM information_schema.tables)

order by typname 

 

查询所有表:

select * from information_schema.tables where  table_Catalog = 'testdb1' and table_schema='testdbschema1'

 

 

表可以继承多个表,这时候将自动继承父表的所有列,并且父表中某个字段数据更新,子表也随之更新,其实就是数据都存放在父表中。如果多个父表,有类型相同的同名字段,则会报错。

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics