gpt4 book ai didi

arrays - 从 postgres 中的对象数组插入唯一值

转载 作者:行者123 更新时间:2023-11-29 12:51:54 24 4
gpt4 key购买 nike

我一直在尝试从一组对象中将一组唯一代码输入到 postgres 中。这是我到目前为止所拥有的,但它在 INTO 附近一直失败。我之前尝试过循环版本,但它从来没有插入任何东西,但也不会产生错误。下面是理想的批量插入,不需要任何 FOR 循环。

CREATE OR REPLACE FUNCTION "InsertCodes" (
"@codes" JSONB,
"@type" TEXT
)
RETURNS void AS
$func$
DECLARE "id" UUID;
BEGIN
"id" = uuid_generate_v4();
SELECT * FROM (
SELECT *
FROM jsonb_array_elements("@codes")
) AS c (
-- fails below
INSERT INTO
"codes" (
"id",
"code",
"name",
"type"
)
VALUES (
"id",
c."code",
c."name",
"@type"
);
ON CONSTRAINT ("code")
DO NOTHING
RETURNING 1;
);
END;
$func$ LANGUAGE PLPGSQL;

@codes 如下所示:

[
{
"code": 1234,
"name": "numeric"
},
{
"code": "1k1l2k",
"name": "alphanumeric"
}
]

最佳答案

查询应该如下所示:

"id" = uuid_generate_v4();
INSERT INTO "codes" ("id", "code", "name", "type")
SELECT "id", item->>'code', item->>'name', "@type"
FROM jsonb_array_elements("@codes") AS item
ON CONFLICT ("code") DO NOTHING;

请注意,对于作为 jsonb 数组传递的所有代码,将插入相同的 "id"。如果它是主键,您应该为每个代码单独生成 "id":

INSERT INTO "codes" ("id", "code", "name", "type")
SELECT uuid_generate_v4(), item->>'code', item->>'name', "@type"
FROM jsonb_array_elements("@codes") AS item
ON CONFLICT ("code") DO NOTHING;

关于arrays - 从 postgres 中的对象数组插入唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51956810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com