Greenplum数据库数据类型
Greenplum数据库数据类型
Greenplum数据库有丰富的本地数据类型集供用户使用。 用户还可以使用CREATE TYPE 命令定义新的数据类型。该引用显示所有的内置数据类型。除了这里列出的类型之外, 还有一些内部使用的数据类型,例如 oid (对象标识符),但是在本指南中没有记录。
以下数据类型由SQL指定: bit, bit varying, boolean, character varying, varchar, character, char, date, double precision, integer, interval, numeric, decimal, real, smallint, time (有或没有时区)和timestamp (有或没有时区)。
每种数据类型都具有由其输入和输出功能决定的外部表现。 许多内置类型具有明显的外部格式。 但是有些数据类型只为PostgreSQL (和Greenplum数据库)所用,例如几何路径,或者一些格式可能的情况, 例如日期和时间类型。一些输入和输出功能不可逆。也就是说,与原始输入相比,输出功能的结果可能会失去准确性。
名称 | 别名 | 尺寸 | 范围 | 描述 |
---|---|---|---|---|
bigint | int8 | 8 bytes | -9223372036854775808 to 9223372036854775807 | 大范围整数 |
bigserial | serial8 | 8 bytes | 1 to 9223372036854775807 | 大的自动增量整数 |
bit [ (n) ] | n bits | bit string constant | 固定长度位串 | |
bit varying [ (n) ]1 | varbit | actual number of bits | bit string constant | 可变长度位串 |
boolean | bool | 1 byte | true/false, t/f, yes/no, y/n, 1/0 | 逻辑布尔(true / false) |
box | 32 bytes | ((x1,y1),(x2,y2)) | 平面中的矩形框 - 分配键列中不允许。 | |
bytea1 | 1 byte + binary string | sequence of octets | 可变长度二进制字符串 | |
character [ (n) ]1 | char [ (n) ] | 1 byte + n | strings up to n characters in length | 定长的空白填充。 |
character varying [ (n) ]1 | varchar [ (n) ] | 1 byte + string size | strings up to n characters in length | 受限的可变长度。 |
cidr | 12 or 24 bytes | IPv4和IPv6网络 | ||
circle | 24 bytes | <(x,y),r> (center and radius) | 平面的圆 - 不允许在分配键列中。 | |
date | 4 bytes | 4713 BC - 294,277 AD | 日历日期(年,月,日) | |
decimal [ (p, s) ]1 | numeric [ (p, s) ] | variable | no limit | 用户指定的精度,精确 |
double precision | float8 float |
8 bytes | 15 decimal digits precision | 可变精度,不精确 |
inet | 12 or 24 bytes | IPv4和IPv6主机和网络 | ||
integer | int, int4 | 4 bytes | -2147483648 to +2147483647 | 通常选择整数类型 |
interval [ (p) ] | 12 bytes | -178000000 years - 178000000 years | 时间跨度 | |
json | 1 byte + json size | json of any length | 不受限制的可变长度 | |
lseg | 32 bytes | ((x1,y1),(x2,y2)) | 平面中的线段 - 分配键列中不允许。 | |
macaddr | 6 bytes | MAC 地址 | ||
money | 8 bytes | -92233720368547758.08 to +92233720368547758.07 | 货币金额 | |
path1 | 16+16n bytes | [(x1,y1),...] | 平面上的几何路径 - 分布关键列中不允许。 | |
point | 16 bytes | (x,y) | 平面上的几何点 - 分布关键列中不允许。 | |
polygon | 40+16n bytes | ((x1,y1),...) | 在平面中封闭的几何路径 - 分配关键列中不允许。 | |
real | float4 | 4 bytes | 6 decimal digits precision | 可变精度,不准确 |
serial | serial4 | 4 bytes | 1 to 2147483647 | 自动增量整数 |
smallint | int2 | 2 bytes | -32768 to +32767 | 小范围整数 |
text1 | 1 byte + string size | strings of any length | 变量无限长 | |
time [ (p) ] [ without time zone ] | 8 bytes | 00:00:00[.000000] - 24:00:00[.000000] | 时间只有一天 | |
time [ (p) ] with time zone | timetz | 12 bytes | 00:00:00+1359 - 24:00:00-1359 | 时间只有一天, 带时区 |
timestamp [ (p) ] [ without time zone ] | 8 bytes | 4713 BC - 294,277 AD | 日期和时间 | |
timestamp [ (p) ] with time zone | timestamptz | 8 bytes | 4713 BC - 294,277 AD | 日期和时间,带时区 |
uuid | 32 bytes | 根据RFC 4122,ISO / IEC 9834-8:2005的通用唯一标识符 | ||
xml1 | 1 byte + xml size | xml of any length | 变量无限长 | |
txid_snapshot | 用户级事务ID快照 |
伪类型
Greenplum数据库支持统称为 伪类型的专用数据类型项。 伪类型不能用作列数据类型,但可以用于声明函数的参数或结果类型。每个可用的伪类型在函数的行为与简单地取得或返回特定SQL数据类型的值不对应的情况下很有用。
以程序语言编码的函数只能使用其实现语言所允许的伪类型。 程序语言都禁止使用伪类型作为参数类型,并且只允许使用 void 和 record作为结果类型。
伪类型记录 作为返回数据类型的函数返回未指定的行类型。 该 记录 表示可能是匿名复合类型的数组。由于 复合数据带有自己的类型识别,因此在数组级别不需要额外的知识。
伪类型void 表示函数无返回值。
types anyelement, anyarray, anynonarray, 和 anyenum 多态类型的伪类型。 一些程序语言还支持使用类型 anyarray, anyelement, anyenum, 和 anynonarray的多态函数。
有关伪类型的更多信息, 请参阅有关 伪类型的Postgres文档。
多态类型
特别有趣的四种伪类型是 anyelement, anyarray, anynonarray, 和 anyenum, 它们统称为多态 类型。使用这些类型声明的任何函数都被称为多态函数。一个多态函数可以对许多不同的数据类型进行操作,特定数据类型由在运行时实际传递给它的数据类型确定。
当一个调用多态函数的查询被解析时,多态参数和结果会被绑在一起并且解析为一种特定的数据类型。声明为 anyelement 的每个位置(参数或返回值)声明为anyelement的每个位置(参数或返回值)都被允许具有任何特定的实际数据类型,但在任何给定的调用中,它们必须都是相同的实际类型 声明为anyarray c的每个位置都可以有任何数组数据类型,但类似地,它们必须都是相同的类型。 如果有声明为anyarray也有声明为 anyelement, 则再anyarray 位置中的实际数组类型 必须是一个数组的,其元素在anyelement 位置上显示相同的类型。 anynonarray 被视为与 anyelement完全相同,但添加了实际类型不能是数组类型的附加约束。anyenum 被视为与anyelement完全相同,但添加的实际类型必须是 enum类型的约束。
当多个参数位置被声明为多态类型时,net效果是仅允许实际参数类型的某些组合。 例如,一个声明为equal(anyelement, anyelement)的函数只要具有相同的数据类型,就可以使用任何两个输入值。
当函数的返回值被声明为多态类型时,还必须至少有一个参数位置也是多态的,并且作为参数提供的实际数据类型确定该调用的实际结果类型。 例如,如果没有数组下标机制,可以定义一个实现下标的函数 subscript(anyarray, integer) 返回 anyelement。此声明将实际的第一个参数限制为数组类型,并允许解析器从实际的第一个参数的类型推断出正确的结果类型。另一个例子是一个声明的函数 myfunc(anyarray) returns anyenum 将只接受数组enum 类型。
请注意,anynonarray 和anyenum 不代表单独的类型变量; 它们与anyelement类型相同,只是附加约束。 例如,声明函数为 myfunc(anyelement, anyenum) 相当于将其声明为 myfunc(anyenum, anyenum): 两个实际参数必须相同 enum 类型。
当其最后一个参数被声明为一个可变函数(一个取可变数量的参数)是多态的VARIADIC anyarray。为了参数匹配和确定实际的结果类型, 这样的函数的行为与用户已经声明了适当数量的 anynonarray 参数的行为相同。
有关多态类型的更多信息,请参阅有关 多态参数和返回类型的Postgres文档。