# Postgresql 数据类型

**URL:** <https://www.isharkfly.com/t/postgresql/8150>\
**Category:** 数据库\
**Created:** [December 14, 2010, 5:04am UTC](https://www.isharkfly.com/t/postgresql/8150 "2010-12-14T05:04:02Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [December 14, 2010, 5:04am UTC](https://www.isharkfly.com/t/postgresql/8150/1 "2010-12-14T05:04:02Z")

</div>

PostgreSQL 已经提供了丰富的数据类型给用户，用户甚至可以使用CREATE TYPE命令创建一个新的数据类型。

 ![](https://com-ossez-www-discourse.s3.dualstack.us-east-2.amazonaws.com/discourse-uploads/original/2X/2/24bf4f4ed5013d5a8f0c959cd5ea42b37adf594d.jpeg)

对于数据库设计来说使用最多的是可变字符类型、整形、时间、大字段。其他的一些类型使用的并不多。因为使用可变类型可以提供更快的检索速度，整形等数字类型用于做主键和索引往往能够提高数据库的效率。一般来说建议使用整形做为主键。

一张数据库表是不是一定需要主键？  
主键用于建约束和用于标识唯一的记录，虽然数据库表可以不设主键，在Oracle会有一个Oracle自己会为每条记录建立唯一标识，但是我还是认为表建一个主键会比较好，这个主键可以是有意义字段或者毫无意义的字段。

未来便于进行数据移植，对VCHAR数据类型的定义需要考虑到不同数据库的设置。  
在Access中VCHAR只支持255字符长度，但是在Oracle中可以支持2048。如果设置可变字符串为2048，那么在从Oracle移植到 Access中的时候将不会自动对应为VCHAR类型，而会转换为TEXT类型，做为数据库管理员需要对基本的数据类型有一些了解。
