Greenplum数据库数据类型
以下数据类型由SQL指定: bit, bit varying, boolean, character varying, varchar, character, char, date, double precision, integer, interval, numeric, decimal, real, smallint, time (有或没有时区)和timestamp (有或没有时区)。
每种数据类型都具有由其输入和输出功能决定的外部表现。 许多内置类型具有明显的外部格式。 但是有些数据类型只为PostgreSQL (和Greenplum数据库)所用,例如几何路径,或者一些格式可能的情况, 例如日期和时间类型。一些输入和输出功能不可逆。也就是说,与原始输入相比,输出功能的结果可能会失去准确性。
Greenplum数据库支持统称为 伪类型的专用数据类型项。 伪类型不能用作列数据类型,但可以用于声明函数的参数或结果类型。每个可用的伪类型在函数的行为与简单地取得或返回特定SQL数据类型的值不对应的情况下很有用。
以程序语言编码的函数只能使用其实现语言所允许的伪类型。 程序语言都禁止使用伪类型作为参数类型,并且只允许使用 void 和 record作为结果类型。
伪类型void 表示函数无返回值。
注解: Greenplum数据库不支持触发器和伪类型 触发器。
types anyelement, anyarray, anynonarray, 和 anyenum 多态类型的伪类型。 一些程序语言还支持使用类型 anyarray, anyelement, anyenum, 和 anynonarray的多态函数。
有关伪类型的更多信息, 请参阅有关 伪类型的Postgres文档。
多态类型
特别有趣的四种伪类型是 anyelement, anyarray, anynonarray, 和 anyenum, 它们统称为多态 类型。使用这些类型声明的任何函数都被称为多态函数。一个多态函数可以对许多不同的数据类型进行操作,特定数据类型由在运行时实际传递给它的数据类型确定。
当多个参数位置被声明为多态类型时,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文档。
1 对于可变长度数据类型,如果数据大于等于127字节,存储开销是每个字节需要4个字节存储。