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的值来保持一致。