PostgreSQL创建类型PL / pgSQL和cstring

时间:2014-02-01 14:21:50

标签: sql postgresql

我想格式化PostgreSQL 9.1数据库输出中的一些字段。我想创建一个类型,所以我可以在输出函数中进行格式化,并检查输入函数中的不一致性。我决定使用过程语言PL / pgSQL。但是我遇到了一些错误:

CREATE OR REPLACE FUNCTION "CPF_in"(cstring)

"PL/pgSQL functions cannot accept type cstring"

(但这就是手册中的内容。)我可以将“字符变化”代替cstring,甚至将()留空。但是当我要创建所需的类型时:

CREATE TYPE Tcpf (
INPUT = CPF_in(character varying),
OUTPUT = CPF_out
);

我收到了一个错误:

ERROR:  syntax error at or near ")"
LINE 2: INPUT = CPF_in(character varying),

如果我尝试

CREATE TYPE Tcpf (
INPUT = CPF_in(),
OUTPUT = CPF_out
);

我得到了

ERROR:  syntax error at or near ")"
LINE 2: INPUT = CPF_in(),

这应该如何完成?手册只说cstring ......

1 个答案:

答案 0 :(得分:3)

cstring pseudo-type用于使用C等低级语言编程,而不是PL / pgSQL。如果你是creating a new base type,你必须使用像C这样的低级语言。

  

您必须先注册两个或更多功能(使用CREATE FUNCTION)   定义类型。支持功能 input_function 和    output_function 是必需的。 。 。 。   通常,这些函数必须用C或其他低级编码   语言。

控制输出格式的一种更简单的方法是使用视图。如果格式很复杂,请编写一个函数,然后从视图中调用该函数。如果需要强制每个客户端使用格式,则可以撤消对基表的权限。您可能需要创建触发器以使视图完全可更新。

为了控制输入,您可以使用一个功能。 (创建功能......)您可以在PL / pgSQL中编写函数。再次,考虑撤消对表的权限。