用户定义类型的函数和运算符

时间:2014-08-01 09:11:12

标签: postgresql

我使用function_infunction_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} }?

2 个答案:

答案 0 :(得分:1)

您需要从数据类型CREATE CAST ... AS IMPLICITtext。这样,当函数/运算符需要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建议的那样。