在Postgres sql中使用用户定义的数据类型插入表



问题是,在PostgreSQL中如何使用过程或函数插入到表中,其中输入参数是用户定义的数据类型?

在下面的代码中,当我们运行错误": error: relation"抛出。如何使用直接用户定义的数据类型来插入。

旁注:在stackoverflow中有很多使用UDT直接插入的例子,但是这里的问题是针对从存储过程或函数中插入的。

CREATE SCHEMA tooldb;
CREATE TYPE  tooldb.point AS
(
firstpoint  int,
lastpoint int
);
create table if not exists tooldb.points(
firstpoint int,
lastpoint int
);
CREATE OR REPLACE procedure tooldb.point_insert(
in_point tooldb.point
)
LANGUAGE plpgsql AS  $$
BEGIN
insert into tooldb.points (firstpoint, lastpoint)
select firstpoint , lastpoint from in_point;
END  $$;

call tooldb.point_insert((3,5));

过程调用失败

psql:commands.sql:24: ERROR:  relation "in_point" does not exist
LINE 2:     select firstpoint , lastpoint from in_point

不需要PL/pgSQL,纯SQL就足够了。

CREATE OR REPLACE procedure tooldb.point_insert(in_point tooldb.point)
language sql as
$$
insert into tooldb.points (firstpoint, lastpoint)
values (in_point.firstpoint, in_point.lastpoint);
$$;

要插入多行,您可以提供tooldb数组。作为过程参数的点:

CREATE OR REPLACE procedure tooldb.point_insert(in_point tooldb.point[])
language sql as
$$
insert into tooldb.points (firstpoint, lastpoint)
select el.firstpoint, el.lastpoint from unnest(in_point) as el;
$$;

最新更新