Postgresql 将UUID值作为参数传递给函数

Postgresql 将UUID值作为参数传递给函数,postgresql,uuid,postgresql-9.3,Postgresql,Uuid,Postgresql 9.3,我有一些列的表格: --table create table testz ( ID uuid, name text ); 注意:我想通过向函数传递参数来插入ID值。因为我正在生成ID值 在前端使用uuid\u generate\u v4()。所以我需要将生成的值传递给要插入的函数 坐到桌子上 我的错误尝试: 获取错误: ERROR: column "id" is of type uuid but expression is of type character

我有一些列的表格:

--table
create table testz
(
   ID uuid,
   name text
);
注意:我想通过向函数传递参数来插入
ID
值。因为我正在生成
ID
值 在前端使用
uuid\u generate\u v4()
。所以我需要将生成的值传递给要插入的函数 坐到桌子上

我的错误尝试: 获取错误:

ERROR:  column "id" is of type uuid but expression is of type character varying
LINE 1: INSERT INTO testz values(p_id,p_name)

您需要一个简单的强制转换,以确保PostgreSQL理解您要插入的内容:

INSERT INTO testz values(p_id::uuid, p_name); -- or: CAST(p_id AS uuid)
或者(最好)您需要一个具有精确参数类型的函数,如:

CREATE OR REPLACE FUNCTION testz(p_id uuid, p_name text)
RETURNS VOID AS
$BODY$
BEGIN
    INSERT INTO testz values(p_id, p_name);
END;
$BODY$
LANGUAGE PLPGSQL;
这样,调用端可能需要一个强制转换(但是PostgreSQL通常使用函数参数比在
INSERT
语句中进行更好的自动强制转换)

如果您的功能如此简单,您也可以使用:

CREATE OR REPLACE FUNCTION testz(p_id uuid, p_name text)
RETURNS VOID AS
$BODY$
BEGIN
    INSERT INTO testz values(p_id, p_name);
END;
$BODY$
LANGUAGE PLPGSQL;
CREATE OR REPLACE FUNCTION testz(uuid, text) RETURNS VOID
LANGUAGE SQL AS 'INSERT INTO testz values($1, $2)';