Postgresql 从复合类型数组和一个附加列中多插入
Posted
技术标签:
【中文标题】Postgresql 从复合类型数组和一个附加列中多插入【英文标题】:Postgresql multi insert from array of composite type and one additional column 【发布时间】:2021-03-22 16:10:50 【问题描述】:我有什么:
CREATE TYPE Item AS (
a bigint,
b bigint
);
CREATE TABLE items (
id bigint NOT NULL,
a bigint NOT NULL,
b bigint NOT NULL
);
CREATE OR REPLACE FUNCTION items_insert(
_id bigint,
_items Item[]
) RETURNS void AS
...
如何通过一个多插入查询将多个 columns 行插入到 _items 中具有相同 _id 的表项?
我正在使用 Postgresql-9.2
【问题讨论】:
与您的问题无关,但是:Postgres 9.2 是no longer supported,您应该尽快计划升级。 【参考方案1】:我认为您的意思是“插入多个行”而不是列。
假设这是正确的,我认为您正在寻找这样的功能:
create or replace function items_insert(_id bigint, _items item[])
returns void
as
$$
insert into items (id, a, b)
select _id, it.*
from unnest(_items) as it(a,b);
$$
language sql;
Online example
【讨论】:
感谢您的提前。我找到了更短的方法:INSERT INTO items(id, a, b) SELECT _id, (unnest(_items)).*;
@КонстантинПрименко:不建议在 SELECT 列表中使用 unnest()
。最好在FROM子句中使用
为什么不推荐在SELECT
列表中使用unnest()
?以上是关于Postgresql 从复合类型数组和一个附加列中多插入的主要内容,如果未能解决你的问题,请参考以下文章
复合数组类型作为 PostgreSQL 中的 OUTPUT 参数