PosegreSQL基础回顾(第 8 章 数据类型)

编程之家收集整理的这篇文章主要介绍了PosegreSQL基础回顾(第 8 章 数据类型)编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

来源:http://www.postgres.cn/docs/11/

8.1. 数字类型

数字类型由2、4或8字节的整数以及4或8字节的浮点数和可选精度小数组成。表 8.2列出了所有可用类型。

名字 存储尺寸 描述 范围
smallint 2字节 小范围整数 -32768 to +32767
integer 4字节 整数的典型选择 -2147483648 to +2147483647
bigint 8字节 大范围整数 -9223372036854775808 to +9223372036854775807
decimal 可变 用户指定精度,精确 最高小数点前131072位,以及小数点后16383位
numeric 可变 用户指定精度,精确 最高小数点前131072位,以及小数点后16383位
real 4字节 可变精度,不精确 6位十进制精度
double precision 8字节 可变精度,不精确 15位十进制精度
smallserial 2字节 自动增加的小整数 1到32767
serial 4字节 自动增加的整数 1到2147483647
bigserial 8字节 自动增长的大整数

1到9223372036854775807

 

8.1.1. 整数类型

常用的类型是integer,因为它提供了在范围、存储空间和性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用 smallint类型。而只有在integer的范围不够的时候才使用bigint

8.1.2. 任意精度数字

 一个numericprecision(精度)是整个数中有效位的总数,也就是小数点两边的位数。numericscale(刻度)是小数部分的数字位数,也就是小数点右边的部分。因此数字 23.5141 的精度为6而刻度为4。可以认为整数的刻度为零。

numeric列的最大精度和最大比例都是可以配置的。

除了普通的数字值之外,numeric类型允许特殊值NaN, 表示不是一个数字”。任何在 NaN上面的操作都生成另外一个NaN

 类型decimalnumeric是等效的。两种类型都是SQL标准的一部分。

8.1.4. 序数类型

 smallserialserialbigserial类型不是真正的类型,它们只是为了创建唯一标识符列而存在的方便符号(类似其它一些数据库中支持的AUTO_INCREMENT属性)。

8.3. 字符类型

表 8.4. 字符类型

名字 描述
character varying(n)varchar(n) 有限制的变长
character(n)char(n) 定长,空格填充
text 无限变长

 

表 8.4显示了在Postgresql里可用的一般用途的字符类型。

varchar(n)char(n)的概念分别是character varying(n)character(n)的别名。

没有长度声明词的character等效于character(1)

如果不带长度说明词使用character varying,那么该类型接受任何长度的串。后者是一个Postgresql的扩展。

 另外,Postgresql提供text类型,它可以存储任何长度的串。尽管类型text不是SQL标准,但是许多其它 SQL 数据库系统也有它。

当把一个character值转换成其他 字符串类型之一时,拖尾的空白会被移除。请注意,在character varyingtext值里, 结尾的空白语意上有含义的,并且在使用模式匹配(如LIKE和正则表达式)时也会被考虑。

8.5. 日期/时间类型

PostgreSQL支持SQL中所有的日期和时间类型,如表 8.9所示。这些数据类型上可用的操作如第 9.9 节所述。日期根据公历来计算,即使对于该历法被引入之前的年份也一样(见第 B.5 节)。

表 8.9. 日期/时间类型

名字 存储尺寸 描述 最小值 最大值 解析度
timestamp [ (p) ] [ without time zone ] 8字节 包括日期和时间(无时区) 4713 BC 294276 AD 1微秒
timestamp [ (p) ] with time zone 8字节 包括日期和时间,有时区 4713 BC 294276 AD 1微秒
date 4字节 日期(没有一天中的时间) 4713 BC 5874897 AD 1日
time [ (p) ] [ without time zone ] 8字节 一天中的时间(无日期) 00:00:00 24:00:00 1微秒
time [ (p) ] with time zone 12字节 仅仅是一天中的时间(没有日期),带有时区 00:00:00+1459 24:00:00-1459 1微秒
interval [ fields ] [ (p) ] 16字节 时间间隔 -178000000年 178000000年 1微秒

 

注意

sql要求只写timestamp等效于timestamp without time zone,并且Postgresql鼓励这种行为

timestamptz被接受为timestamp with time zone的一种简写,这是一种Postgresql的扩展。

timetimestampinterval接受一个可选的精度值 p,这个精度值声明在秒域中小数点之后保留的位数。缺省情况下,在精度上没有明确的边界。p允许的范围是从 0 到 6。

8.6. 布尔类型

Postgresql提供标准的SQL类型boolean,参见表 8.19boolean可以有多个状态:true(真)”、false(假)”和第三种状态unknown(未知)”,未知状态由SQL空值表示。

表 8.19. 布尔数据类型

名字 存储字节 描述
boolean 1字节 状态为真或假

 

真”状态的有效文字值是:

TRUE
't'
'true'
'y'
'yes'
'on'
'1'

而对于假”状态,你可以使用下面这些值:

FALSE
'f'
'false'
'n'
'no'
'off'
'0'

前导或者末尾的空白将被忽略,并且大小写也无关紧要。使用TRUEFALSE这样的关键词比较好(SQL兼容)。

例 8.2显示了使用字母tf输出boolean值的例子。

例 8.2. 使用boolean类型

CREATE TABLE test1 (a boolean,b text);
INSERT INTO test1 VALUES (TRUE,'sic est');
INSERT INTO test1 VALUES (FALSE,'non est');
SELECT * FROM test1;
 a |    b
---+---------
 t | sic est
 f | non est

SELECT * FROM test1 WHERE a;
 a |    b
---+---------
 t | sic est

8.15. 数组

Postgresql允许一个表中的列定义为变长多维数组。

8.15.1. 数组类型的定义

为了展示数组类型的使用,我们创建这样一个表:

CREATE TABLE sal_emp (
    name            text,pay_by_quarter  integer[],schedule        text[][]
);

如上所示,一个数组数据类型可以通过在数组元素的数据类型名称后面加上方括号([])来命名。

当前的实现也不会强制所声明的维度数。一个特定元素类型的数组全部被当作是相同的类型,而不论其尺寸或维度数。因此,在@H_838_502@CREATE TABLE中声明数组的尺寸或维度数仅仅只是文档而已,它并不影响运行时的行为。

另一种符合sql标准的语法是使用关键词ARRAY,可以用来定义一维数组。pay_by_quarter可以这样定义:

    pay_by_quarter  integer ARRAY[4],

或者,不指定数组尺寸:

    pay_by_quarter  integer ARRAY,

但是和前面一样,Postgresql在任何情况下都不会强制尺寸限制。

8.15.2. 数组值输入

要把一个数组值写成一个文字常数,将元素值用花括号包围并用逗号分隔。

格式如下:'{ val1 delim val2 delim ... }'   一个数组常量的例子是:'{{1,2,3},{4,5,6},{7,8,9}}'

要设置一个数组常量的一个元素为NULL,在该元素值处写NULL(任何NULL的大写或小写变体都有效)。如果你需要一个真正的字符串值NULL”,你必须在它两边放上双引号。

8.15.3. 访问数组

数组下标写在方括号内。默认情况下,Postgresql为数组使用了一种从1开始的编号习惯,即一个具有n个元素的数组从array[1]开始,结束于array[n]

更多

总结

以上是编程之家为你收集整理的PosegreSQL基础回顾(第 8 章 数据类型)全部内容,希望文章能够帮你解决PosegreSQL基础回顾(第 8 章 数据类型)所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

相关文章

猜你在找的Postgre SQL相关文章

本章介绍SQL的语法。它是理解后面章节的基础,它们详细描述了SQL如何用于定义和修改数据。对于已经熟悉SQL的用户,同样应该仔细阅读本章,因为它包含了各个SQL数据库中实现方式不同的一些规则和概念,这些是PostgreSQL特有的属性。4.1. 词法结构SQL输入由一系列命令组成。命令由一系列符号组成,以分号(“;”)结束。输入流的结束也会结束一个命令。每个命令能够使用的符号不尽相同。
3.1. 引言上一章我们描述了PostgreSQL中使用SQL存储和访问数据的基本概念。接下来我们将会讨论一些简化管理和防止数据丢失或损坏的高级特性。最后,我们将会了解一些PostgreSQL扩展。本章将会引用第2章中的一些示例,并且进行修改和改进,所以最好先阅读第2章。本章的某些示例也可以在tutorial目录中的advanced.sql中找到。该文件中还包含一些示例数据。3.2.
上一章讨论了如何创建存储数据的表和其他结构。接下来就需要往表中填充数据。本章设计如何插入,更新,以及删除表中的数据。下一章将最后说明如何从数据库中查询久违的数据。6.1. 插入数据 表刚被创建时,没有任何数据。数据库能够使用之前的第一件事就是插入数据。从概念上讲,每次插入一行数据。当然你也可以插入多行数据,但是无法插入少于一行的数据。即使你只知道某些字段值,也必须创建一个完整的行。I...
2.1. 引言本章概述了如何使用SQL执行简单的操作。本教程只是关于SQL的一个简介,而不是完整的教程。关于SQL的书籍有很多,包括Understanding the New SQL和A Guide to the SQL Standard。需要注意的是一些PostgreSQL语言特性是针对标准SQL的扩展。在以下示例中,假设你已经创建了一个名为mydb的数据库,参见前文,并且能够登录p
1.1. 安装要使用,先安装!可能你的环境中已经安装了PostgreSQL,也许是操作系统已经包含了PostgreSQL,也许是系统管理员已经安装了PostgreSQL。如果是这样的话,你应该通过操作系统文档或者系统管理员了解如何访问PostgreSQL。如果你不确定是否已经安装了PostgreSQL或者是否能够用于实验,可以自己安装。安装并不难,而且是一个很好的练习。PostgreSQL可以
PostgreSQL 11 增加了一个新的模式对象:存储过程(Stored Procedure)。存储过程和函数(Function)类似,不过它没有返回值。存储过程最大的优势就是能够支持事务控制,也就是可以在定义中使用 COMMIT 或者 ROLLBACK 语句。使用 CREATEALTERDROP PROCEDURE 命令创建修改删除存储过程,使用 CALL 命令调用存储过程。支持存储...
文章目录Barman 简介Barman 简介Barman(Backup and Recovery Manager,备份与恢复管理器)是一个用于 PostgreSQL 数据库灾难恢复的开源管理工具,使用 Python 编写。Barman 使得企业能够执行多个关键业务数据库的远程备份,并且协助 DBA 执行灾难时的数据恢复。Barman 用于 PostgreSQL 数据库的物理备份,与 Ora...
pgAdmin 是一个非常流行、功能强大并且开源的 PostgreSQL 管理与开发平台。pgAdmin 支持 Linux、Unix、Mac OS X 以及 Windows 操作系统,可以管理 PostgreSQL 9.2 以及更高版本。