重构类型系统
来自 PostgreSQL 维基
跳转到导航跳转到搜索需求
丰富的类型修饰符
这是 PostGIS 对 creaky typmod 系统的要求
一个 32 位整数不足以方便地描述一个类型的结构。将信息推送到用户空间,正如 PostGIS 所被迫做的那样,会使这些类型暴露于用户环境、search_path 等的变迁。
Typmod 不会在所有操作中保留,会导致意外的行为。需要为类型的数组和其他可能的复数存储单独的条目
带排序规则的类型
除了 typmod 外,可能还需要排序规则属性来支持带排序规则的类型或表达式。有关详细信息,另请参见 Todo:Collate。
CREATE TABLE .. ( ..., field COLLATE <collation>, ... ) expr COLLATE <collation>
匿名 MULTISET
SQL 标准提供匿名多集
CREATE TABLE .. ( .... ROW(integer, varchar(32)) MULTISET )
泛型
一个真正的子类型系统也可能很好地支持某种泛型、类型生成器或类型接口。
请注意,当前的伪类型(anyelement、anyarray 等)只能用作函数的参数或结果类型。此外,我们只能对每个函数使用一个伪类型。
参考资料
关联数组
hstore 在 PostgreSQL 中是一个文本到文本的关联数组,但其他数据库支持类型化的关联数组数据类型。
DB2 的语法
CREATE TYPE char2int AS INTEGER ARRAY[VARCHAR(20)];
Oracle 的语法
TYPE char2int IS TABLE OF NUMBER(10) INDEX BY VARCHAR2(20);
请注意,Oracle 仅将关联数组支持为 PL/SQL 中的变量。