GaussDB(for openGauss)的相关概念与常用数据类型。内容摘自华为官网发布的opengauss_devg文件。

相关概念

数据库

数据库用于管理各类数据对象,与其他数据库隔离。创建数据对象时可以指定对应的 表空间,如果不指定相应的表空间,相关的对象会默认保存在PG_DEFAULT空间中。 数据库管理的对象可分布在多个表空间上。

表空间

在GaussDB(for openGauss)中,表空间是一个目录,可以存在多个,里面存储的是它 所包含的数据库的各种物理文件。由于表空间是一个目录,仅是起到了物理隔离的作 用,其管理功能依赖于文件系统。

模式

GaussDB(for openGauss)的模式是对数据库做一个逻辑分割。所有的数据库对象都建 立在模式下面。GaussDB(for openGauss)的模式和用户是弱绑定的,所谓的弱绑定是 指虽然创建用户的同时会自动创建一个同名模式,但用户也可以单独创建模式,并且 为用户指定其他的模式。

用户和角色

GaussDB(for openGauss)使用用户和角色来控制对数据库的访问。根据角色自身的设 置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户。在GaussDB(for openGauss)中角色和用户之间的区别只在于角色默认是没有LOGIN权限的。在 GaussDB(for openGauss)中一个用户唯一对应一个角色,不过可以使用角色叠加来更 灵活地进行管理。

事务管理

在事务管理上,GaussDB(for openGauss)采取了MVCC(多版本并发控制)结合两阶 段锁的方式,其特点是读写之间不阻塞。GaussDB(for openGauss)的MVCC没有将历 史版本数据统一存放,而是和当前元组的版本放在了一起。GaussDB(for openGauss) 没有回滚段的概念,但是为了定期清除历史版本数据GaussDB(for openGauss)引入了 一个VACUUM线程。一般情况下用户不用关注它,除非要做性能调优。此外, GaussDB(for openGauss)是自动提交事务。

常用数据类型

数值类型

整数类型

名称

描述

储存空间

范围

TINYINT

微整数,别名为 INT1。

1字节

0 ~ 255

SMALLINT

小范围整数,别名为 INT2。

2字节

-32,768 ~ +32,767

INTEGER

常用的整数,别名为 INT4。

4字节

-2,147,483,648 ~ +2,147,483,647

BINARY_IN TEGER

常用的整数INTEGER 的别名,为兼容 Oracle类型。

4字节

-2,147,483,648 ~ +2,147,483,647

BIGINT

大范围的整数,别名 为INT8。

8字节

-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807

● TINYINT、SMALLINT、INTEGER和BIGINT类型存储各种范围的数字,也就是整数。试图存 储超出范围以外的数值将会导致错误。

● 常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有 取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的 范围不够的时候才使用BIGINT,因为前者相对快得多。

任意精度型

名称

描述

存储空间

范围

NUMERIC[ (p[,s])], DECIMAL[ (p[,s])]

精度p取值范围为 [1,1000],标度s取 值范围为[0,p]。 说明: p为总位数,s为小 数位数。

用户声明精度。每四 位(十进制位)占用 两个字节,然后在整 个数据上加上八个字 节的额外开销。

未指定精度的情况下, 小数点前最大131,072 位,小数点后最大 16,383位。

NUMBER[( p[,s])]

NUMERIC类型的 别名,为兼容 Oracle数据类型。

用户声明精度。每四 位(十进制位)占用 两个字节,然后在整 个数据上加上八个字 节的额外开销。

未指定精度的情况下, 小数点前最大131,072 位,小数点后最大 16,383位。

● 与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效 果都要差一些。在进行数值类型定义时,优先选择整数类型。当且仅当数值超出整数可表示 最大范围时,再选用任意精度类型。

● 使用Numeric/Decimal进行列定义时,建议指定该列的精度p以及标度s。

浮点型

名称

描述

储存空间

范围

REAL, FLOAT4

单精度浮点数,不 精准。

4字节

6位十进制数字精度。

DOUBLE PRECISION , FLOAT8

双精度浮点数,不 精准。

8字节

1E-307~1E+308, 15位十进制数字精度。

FLOAT[§ ]

浮点数,不精准。 精度p取值范围为 [1,53]。 说明: p为精度,表示总位 数。

4字节或8字节

根据精度p不同选择 REAL或DOUBLE PRECISION作为内部表 示。如不指定精度,内 部用DOUBLE PRECISION表示。

BINARY_D OUBLE

是DOUBLE PRECISION的别 名,为兼容Oracle 类型。

8字节

1E-307~1E+308, 15位十进制数字精度。

DEC[(p[,s] )]

精度p取值范围为 [1,1000],标度s取 值范围为[0,p]。 说明: p为总位数,s为小 数位位数。

用户声明精度。每四 位(十进制位)占用 两个字节,然后在整 个数据上加上八个字 节的额外开销。

用户声明精度。每四 位(十进制位)占用 两个字节,然后在整 个数据上加上八个字 节的额外开销。

INTEGER[( p[,s])]

精度p取值范围为 [1,1000],标度s取 值范围为[0,p]。

用户声明精度。每四 位(十进制位)占用 两个字节,然后在整 个数据上加上八个字 节的额外开销。

未指定精度的情况下, 小数点前最大131,072 位,小数点后最大 16,383位。

字符类型

字符类型

名称

描述

储存空间

CHAR(n) CHARACTER(n) NCHAR(n)

定长字符串,不足补空格。n是指字节长 度,如不带精度n,默认精度为1。

最大为10MB。

VARCHAR(n) CHARACTER VARYING(n)

变长字符串。n是指字节长度。

最大为10MB。

VARCHAR2(n)

变长字符串。是VARCHAR(n)类型的别名, 为兼容Oracle类型。n是指字节长度。

最大为10MB。

NVARCHAR2(n)

变长字符串。n是指字节长度。

最大为10MB。

CLOB

文本大对象。是TEXT类型的别名,为兼容 Oracle类型。

最大为 1GB-8203字节 (即 1073733621字 节)。

TEXT

变长字符串。

最大为 1GB-8203字节 (即 1073733621字 节)。

除了每列的大小限制以外,每个元组的总大小也不可超过1GB-8203字节(即 1073733621字节)。

特殊字符类型

名称

描述

储存空间

name

用于对象名的内部类型。

64字节。

“char”

单字节内部类型。

1字节。

在GaussDB(for openGauss)里另外还有两种定长字符类型。在。name 类型只用在内部系统表中,作为存储标识符,不建议普通用户使用。该类型长度当前 定为64字节(63可用字符加结束符)。类型"char"只用了一个字节的存储空间。他在 系统内部主要用于系统表,主要作为简单化的枚举类型使用。

二进制类型

名称

描述

储存空间

BLOB

二进制大对象 目前BLOB支持的外部存取接口仅 为: ● DBE_LOB.GETLENGTH ● DBE_LOB.READ ● DBE_LOB.WRITE ● DBE_LOB.WRITEAPPEND ● DBE_LOB.COPY ● DBE_LOB.ERASE 这些接口详细说明请参见 15.12.2.1 。 说明: 列存不支持BLOB类型

最大为1GB减去53字节(即 1073741771字节)。

RAW

变长的十六进制类型 说明: 列存不支持RAW类型

4字节加上实际的十六进制字符串。最 大为1GB减去53字节(即1073741771 字节)。

BYTE A

变长的二进制字符串

4字节加上实际的二进制字符串。最大 为1GB减去53字节(即1073741771字 节)。

除了每列的大小限制以外,每个元组的总大小也不可超过1GB-53字节(即 1073741771字节)。

日期/时间类型

名称

描述

储存空间

DATE

日期和时间。

4字节(实际存储空 间大小为8字节)

TIME [§] [WITHOUT TIME ZONE]

只用于一日内时间。 p表示小数点后的精度,取值范围为 0~6。

8字节

TIME [§] [WITH TIME ZONE]

只用于一日内时间,带时区。 p表示小数点后的精度,取值范围为 0~6。

12字节

TIMESTAMP[§] [WITHOUT TIME ZONE]

日期和时间。 p表示小数点后的精度,取值范围为 0~6。

8字节

TIMESTAMP[§] [WITH TIME ZONE]

日期和时间,带时区。TIMESTAMP 的别名为TIMESTAMPTZ。 p表示小数点后的精度,取值范围为 0~6。

8字节

SMALLDATETIME

日期和时间,不带时区。 精确到分钟,秒位大于等于30秒进一 位。

8字节

INTERVAL DAY (l) TO SECOND §

时间间隔,X天X小时X分X秒。 ● l:天数的精度,取值范围为0~6。 为适配Oracle语法,未实现具体功 能。 ● p:秒数的精度,取值范围为 0~6。小数末尾的零不显示。

16字节

INTERVAL [FIELDS] [ § ]

时间间隔。 ● fižÃšä:可以是YEAR,MONTH, DAY,HOUR,MINUTE, SECOND,DAY TO HOUR,DAY TO MINUTE,DAY TO SECOND,HOUR TO MINUTE, HOUR TO SECOND,MINUTE TO SECOND。 ● p:秒数的精度,取值范围为 0~6,且fižÃšä为SECOND,DAY TO SECOND,HOUR TO SECOND或MINUTE TO SECOND 时,参数p才有效。小数末尾的零 不显示。

12字节

reltime

相对时间间隔。格式为: X years X mons X days XX:XX:XX。 ● 采用儒略历计时,规定一年为 365.25天,一个月为30天,计算 输入值对应的相对时间间隔,输出 采用POSTGRES格式。

4字节

如果其他的数据库时间格式和GaussDB(for openGauss)的时间格式不一致,可通过修 改配置参数DateStyle的值来保持一致。