Postgresql INSERT RETURNING 复杂类型

Postgresql INSERT RETURNING complex type

我对 Postgresql 函数有疑问。 我想声明一个函数,它将在 table 中插入一行,而不是 return 我这一行(但是有一个自动创建的字段,比如 Id)。

CREATE OR REPLACE FUNCTION UserCreate(
    name character varying(80),
    surname character varying(80),
    age int,
    email character varying(80)
)
RETURNS "Users" AS $$
BEGIN
INSERT INTO "Users" 
    (name,surname,age,email) VALUES 
    (name, surname,  age, email) RETURNING
    * AS result;
END;
$$ LANGUAGE 'plpgsql' 

但是当我尝试创建此函数时出现错误:

Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING.

我试图在 RETURNING 子句中找到一些示例,但所有示例都只使用基本的 return 类型,例如整数。

您可以使用变量来传送 insert ... returningreturn 之间的结果。类似于:

CREATE OR REPLACE FUNCTION UserCreate(
    name character varying(80),
    surname character varying(80),
    age int,
    email character varying(80)
)
RETURNS "Users" AS $$
DECLARE
  result "Users";
BEGIN
INSERT INTO "Users" 
    (name,surname,age,email) 
    VALUES  (name, surname,  age, email) 
    RETURNING * INTO result;
RETURN result;
END;
$$ LANGUAGE 'plpgsql';