在在postgresql中创建UDT手册中,我找到了以下语句:
PostgreSQL允许用户定义的类型接受一个或多个简单常量或标识符作为修饰符。但是,该信息必须能够打包到单个非负整数值中,以便存储在系统目录中。
那么,真的没有办法,存储更多的信息,将适合于一个非负整数?例如,我希望能够存储一个函数的名称,该函数在插入数据时应该作为缺省值被调用(因为可能有多个函数可以处理该数据)。那是不可能的?
发布于 2013-02-26 13:57:17
类型的系统目录,pg_catalog.pg_type有以下列:
typtypmod integer not null正如您通过运行\d pg_type看到的。
没有办法存储一些不能容纳到整数中的东西,因为目录就是这样存储类型类型的。
非负要求似乎源于使用-1作为保留值.
您描述的特定问题听起来更适合添加列触发器。听起来你真正想要的是DOMAINS和在域上添加触发器的能力--但不幸的是,目前还不支持域上的触发器。
发布于 2013-02-28 11:54:35
经过大量的研究,我发现了进一步的可能性:
虽然不可能在pg_type中存储更多的信息,因为它是整数类型的,但是可以选择在表的属性中存储信息。
但是,为了达到这个目的,您必须更改postgresql的源代码:文件reloptions.c允许添加键值格式key=value可接受的字段。使用SQL SET命令(例如ALTER TABLE tbl ALTER COLUMN col SET (k1 = v1))可以设置键值。然后,这些信息存储在attoptions字段中的pg_attribute中(而不是pg_type中)。
https://dba.stackexchange.com/questions/35452
复制相似问题