我使用function_in
和function_out
构建了用户定义类型。
CREATE OR REPLACE FUNCTION MyOwnType_in(cstring)
RETURNS MyOwnType
AS '/home/postgres/ENCRIPTION/MyOwnType/MyOwnType.so','MyOwnType_in'
LANGUAGE C IMMUTABLE STRICT;
CREATE OR REPLACE FUNCTION MyOwnType_out(MyOwnType)
RETURNS cstring
AS '/home/postgres/ENCRIPTION/MyOwnType/MyOwnType.so','MyOwnType_out'
LANGUAGE C IMMUTABLE STRICT;
如您所见,每个function_in接收cstring,而function_out返回cstring。
事情是功能超载和操作员覆盖,我不想浪费我的时间。
有没有办法为我的MyOwnType
类型声明 DEFAULT TYPE ,告诉postgres带有MyOwnType
参数的函数和运算符可以解析并将其重写为{{1} }?
答案 0 :(得分:1)
您需要从数据类型CREATE CAST ... AS IMPLICIT
到text
。这样,当函数/运算符需要text
时,您的类型将自动转换为text
。
详细信息:http://www.postgresql.org/docs/current/static/sql-createcast.html
答案 1 :(得分:1)
您对类型的处理最多的是mark it作为string type,其中包含:
CREATE TYPE MyOwnType(
INPUT = MyOwnType_in,
OUTPUT = MyOwnType_out,
CATEGORY = 'S'
-- ...
);
在将用户定义的类型添加到现有内置类别(例如数字或字符串类型)时,category参数特别有用。但是,也可以创建新的完全用户定义的类型类别。选择除大写字母以外的任何ASCII字符,以命名此类别...
可能需要额外的CAST
s,正如@IgorRomanchenko建议的那样。