postgresql数据库——数据类型总结

postgresql数据库的 数据类型

postgresql支持多种数据类型,主要有:整数类型、浮点数类型、任意精度数值、日期时间类型、字符串类型、二进制类型、布尔类型和数组类型等。

1、整数类型

postgresql提供了多种数值数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,所需要的存储空间也会越大。

postgresql提供的整数类型有:mallint、int、bigint。

《类型名称》  《说明》     《存储需求》   《取值范围》

smallint   小范围的整数       2字节        -32768----32767

int        普通大小的整数     4字节        -2147483648----2147483647

bigint     大整数            8字节        -9223372036854775808----9223372036854775807

2、浮点数类型:

postgresql中使用浮点数来表示小数。浮点类型有两种:real和double precision,如下所示:

《类型名称》            《说明》         《存储需求》

real                 6位十进制数字精度          4字节

double precision     15位十进制数字精度         8字节

3、任意精度类型

postgresql中使用numeric表示任意精度的类型是数值,使用numeric(m,n)来表示,其中m称为精度,表示总共的位数;n称为标度,是表示小数的位数。例如:563.129的精度为9,标度为3

注意:numeric的有效取值范围由M和D的值决定。如果改变M而固定D,那么其取值范围将随M的变大而变大。另外,如果用户指定的精度超出精度外,就会四舍五入进行处理。如下:

testdb=# create table emp (t numeric(5,1),y numeric(5,3));

testdb=# insert into emp values (9.12,9.156);

testdb=# select * from emp;

t  |   y

-----+-------

9.1 | 9.156

4、日期与时间类型:

postgresql中有多种表示日期的数据类型,主要有:time、date、timestamp和interval。每一个类型都有合法的取值范围,当指定确实不合法的值时系统将“零”值插入数据库中。如下类型介绍:

《类型名称》     《含义》            《日期范围》         《存储需求》      《存储格式》

time        只用于一日内的时间   00:00:00---24:00:00        8字节           HH:MM:SS

date        只用于日期          4713BC---58784897AD         4字节          YYYY-MM-DD

timestamp   日期和时间          4713BC---58784897AD         8字节       YYYY-MM-DD HH:MM:SS

注意:time和timestamp类型,默认情况下为without time zone(不带时区);如果需要,可以设置为带时区(with time zone )

4.1、time:类型使用

time类型用在时间上,在存储时需要8字节,格式为:HH:MM:SS。HH表示小时;MM表示分钟;SS表示秒。

例子:

testdb=# create table test (t time);

testdb=# insert into test values ('11:10:25 '),('23:45');   ---注意,第一个时间值最后有一个空格,

testdb=# select * from test;

t

----------

11:10:25

23:45:00

(2 rows)

从上面的结果可以看出,两个时间都正确插入,而且格式都为:HH:MM:SS

testdb=# insert into test values (current_time),(now());    ---插入系统当前时间

INSERT 0 2

testdb=# select * from test;

t

-----------------

11:10:25

23:45:00

04:56:57.034863

04:56:57.034863

(4 rows)

从上面可以看出,会显示时区;

4.2、date:类型

date类型用在日期值时,没有时间部分,存储需要4字节。日期格式为:'YYYY-MM-DD',其中YYYY表示年;MM表示月;DD表示日;。在给date类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合date的日期格式即可。

①:以“YYYY-MM-DD”或者“YYYYMMDD”字符串格式表示的日期。例如,输入‘2018-12-31’或者‘20181231’,插入数据库的日期都为2018-12-31.

②:以“YY-MM-DD”或者“YYMMDD”字符串格式表示的日期,在这里YY表示两位的年值。postgresql使用以下规则解释两位年值:“00-69”转换年值为‘2000--2069’;‘70-99’转换年值为‘1970-1999’;

③:利用current_date或者now()插入当前系统日期。

例子:

testdb=# create table emp (d date);

testdb=# insert into emp values ('1998-08-08'),('19980808'),('20180808');

testdb=# insert into emp values (now());  ---插入系统当前值

testdb=# select * from emp;

d

------------

1998-08-08

1998-08-08

2018-08-08

2018-06-23

(4 rows)

注意:now()函数返回日期和时间值,在保存到数据库时,只保留了日期部分。

4.3、timestamp:类型

timestamp的日期格式为YYYY-MM-DD HH:MM:SS。在存储时需要8字节。如:

testdb=# create table emp (ts timestamp);

testdb=# insert into emp values ('2018-08-10 11:00:02'),(now());

testdb=# select * from emp;

ts

---------------------------

2018-08-10 11:00:02

2018-06-23 05:14:17.52538

(2 rows)

4.4、创建带时区的日期和时间类型

testdb=# create table emp (t time with time zone);

CREATE TABLE

testdb=# insert into emp values ('12:10:05 PST'),('12:10:10');

INSERT 0 2

testdb=# select * from emp;

t

-------------

12:10:05-08

12:10:10-04

(2 rows)

其中,PST为西8区,如果不指定时区,默认是东8区。

5、字符串类型:

字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。除了可以进行区分或者不区分大小写的字符串比较外,还可以进行模式匹配查找。postgresql的字符串类型包括:char、varchar和text。

《类型名称》                      《说明》

char(n)              固定长度非二进制字符串,不足补空白

varchar(n)           变长非二进制字符串,有长度限制

text                 变长非二进制字符串,无长度限制

注意:

char(n) varchar(n),其中n是一个正整数。表示可以存储n个字符的字符串。如果要存储的字符串比声明的长度短,类型为char的数值将会用空白填满;而类型为varchar的数值将只存储短些的字符串。

char类型中填充的空白是无意义的。例如,比较两个char值的时候填充的空白都会被忽略,在转换成其他字符串类型的时候,char值里面的空白会被删除,注意在varchar和text数值里,结尾的空白是有意思的。

例子:

testdb=# create table emp (v1 char(5),v2 varchar(10));

CREATE TABLE

testdb=# insert into emp values ('ab','ab '),('abc','abc'),('ab   ','ab   ');

INSERT 0 3

testdb=# select * from emp;

v1   |  v2

-------+-------

ab    | ab

abc   | abc

ab    | ab

(3 rows)

testdb=# select concat('(',v1, ')'),concat('(',v2, ')') from emp;

concat  | concat

---------+---------

(ab   ) | (ab )

(abc  ) | (abc)

(ab   ) | (ab   )

(3 rows)

--text类型:

postgresql提供text类型,它可以存储任何长度的字符串。虽然text类型不是sql标准,但是许多其他sql数据库系统也有。

例子:

testdb=# create table emp (t1 text);

testdb=# insert into emp values ('ab'),('agcd'),('ab   ');

testdb=# select * from emp;

t1

-------

ab

agcd

ab

(3 rows)

testdb=# select concat('(',t1, ')') from emp;

concat

---------

(ab)

(agcd)

(ab   )

(3 rows)

6、二进制类型

postgresql支持两类字符型数据:文本字符串和二进制字符串,postgresql提供了bytea类型,用于存储二进制字符串。bytea类型存储空间为4字节加上实际的二进制字符串。

testdb=# create table emp (b bytea);                               ^

testdb=# insert into emp values (E'\\000');

INSERT 0 1

testdb=# select * from emp;

b

------

\x00

(1 row)

7、布尔类型

postgresql提供了Boolean布尔数据类型。Boolean用1字节来存储,提供了true(真),false(假)两个值。另外,用户可以使用其他有效文本值替代true和false。替代true的文本值为‘t’‘true’‘y’,'1'‘yes’;替代false的文本值为‘f’‘n’,'0'

testdb=# create table emp (b boolean);

CREATE TABLE

testdb=# insert into emp values (true),(false),('y'),('no'),('0');

INSERT 0 5

testdb=# select * from emp;

b

---

t

f

t

f

f

(5 rows)

8、数组类型

postgresql允许将字段定义成定长或变长的一维或多维数组。数组类型可以是任何基本类型或用户定义类型。

原文地址:http://blog.51cto.com/fengfeng688/2149494

时间: 2024-11-23 05:43:10

postgresql数据库——数据类型总结的相关文章

PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQL数据库,希望大家多多提意见. 1.PostgreSQL数据库介绍 PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL.它具有很多不错的特点: 开源:PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 B

浅谈PostgreSQL数据库

近期工作重点一直放在数据库设计方面,借助这次机会抽时间整理了一些我对PostgreSQL数据库的理解,同时也是对近段时间学习的一个总结.对于很多人而言或许没有听说过这个数据库,通常我们耳边伴随的都是Oracle.MySQL.Microsoft SQL Server一类的关系型数据库. 但看下数据库排行榜,或许更能直观的认识到PostgreSQL数据库的强大与普遍 既然PostgreSQL排行这么高,那为何在国内名气不如其他数据库呢?这其中我认为重点在于两点:一.市场推广力度的问题:二.应用场景与

C#访问PostGreSQL数据库的方法 http://www.jb51.net/article/35643.htm

这次的项目中的一个环节要求我把PostGreSQL数据取出来,然后放到SqlServer里,再去处理分析. http://www.jb51.net/article/35643.htm - 我对PostGreSQL只是一知半解,记录这个过程是希望如果以后微软技术方向的人遇到类似的需求,可以有个比较直接的的参考. 在不熟悉的知识领域里,总是有搜索引擎可以帮到我. 初步了解PostGreSQL数据库及数据形态 首先我想看看PostGreSQL的数据库以及我想要获取的数据形态是什么样子的,Linux和P

数据库并发事务控制四:postgresql数据库的锁机制二:表锁

在博文<数据库并发事务控制四:postgresql数据库的锁机制 > http://blog.csdn.net/beiigang/article/details/43302947 中后面提到: 常规锁机制可以参考pg的官方手册,章节和内容见下面 13.3. Explicit Locking http://www.postgresql.org/docs/9.4/static/explicit-locking.html 这节分为:表锁.行锁.页锁.死锁.Advisory锁(这个名字怎么翻译好???

PostgreSQL 数据库错误状态编号解释[附带列表

PostgreSQL 服务器发出的所有消息都赋予了五个字符的错误代码, 这些代码遵循 SQL 的 "SQLSTATE" 代码的习惯.需要知道发生了什么错误条件的应用通常应该测试错误代码,而不是查看文本错误信息.这些错误 代码轻易不会随着 PostgreSQL 的版本更新而修改,并且一般也不会随着错误信息的本地化而发生修改. 请注意有些,但不是全部,PostgreSQL 生成的错误代码是由 SQL 标准定义的: 有些标准没有定义的错误条件是我们发明的或者是从其它数据库借来的. 根据标准,

postgresql数据库体系结构

postgresql数据库是由:连接管理系统(系统控制器).编译执行系统.存储管理系统.事务系统.系统表 五大部分组成. ①:连接管理系统:接收外部操作对系统的请求,对操作请求进行预处理和分发,起系统逻辑控制作用. ②:编译执行系统:由查询编译器.查询执行器组成,完成操作请求在数据库中的分析处理和转化工作,最终实现物理存储介质中数据的操作. ③:存储管理系统:由索引管理器.内存管理器.外存管理器组成,负责存储和管理物理数据,提供对编译查询系统的支持: ④:事务系统:是由事务管理器.日志管理器.并

postgresql数据库varchar、char、text的比较

名字 描述character varying(n), varchar(n) 变长,有长度限制character(n), char(n) 定长,不足补空白text 变长,无长度限制简单来说,varchar的长度可变,而char的长度不可变,对于postgresql数据库来说varchar和char的区别仅仅在于前者是变长,而后者是定长,最大长度都是10485760(1GB) varchar不指定长度,可以存储最大长度(1GB)的字符串,而char不指定长度,默认则为1,这点需要注意. text类型

PowerDesigner反向工程PostgreSQL数据库

1. 环境准备: a)         安装PowerDesigner,以PowerDesigner15.1为例 b)         安装java jdk,以jdk-7-windows-i586为例 c)         下载postgressql jdbc驱动jar包,以postgresql-8.1-415.jdbc2.jar为例 2. 远程连接PostgreSQL数据库 a)         打开PowerDesigner b)         新建一个空白物理数据模型 点击PowerDe

PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)

PostgreSQL数据库内核分析 跳转至: 导航. 搜索 目录 1系统概述 2体系结构 3存储管理 4索引 5查询编译 6查询执行 7事务处理与并发控制 8数据库安全 9附录A 用Eclipse开发和调试 系统概述 初始化数据库:./initdb --no-locale -D ../data ./pg_ctl start -D ../data 数据库命令:initdb createuser dropuser createdb dropdb pg_dump pg_restore pg_ctl v