我想格式化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 ......
答案 0 :(得分:3)
cstring pseudo-type用于使用C等低级语言编程,而不是PL / pgSQL。如果你是creating a new base type,你必须使用像C这样的低级语言。
您必须先注册两个或更多功能(使用CREATE FUNCTION) 定义类型。支持功能 input_function 和 output_function 是必需的。 。 。 。 通常,这些函数必须用C或其他低级编码 语言。
控制输出格式的一种更简单的方法是使用视图。如果格式很复杂,请编写一个函数,然后从视图中调用该函数。如果需要强制每个客户端使用格式,则可以撤消对基表的权限。您可能需要创建触发器以使视图完全可更新。
为了控制输入,您可以使用一个功能。 (创建功能......)您可以在PL / pgSQL中编写函数。再次,考虑撤消对表的权限。