使用 .NET Npgsql 在 PostgreSQL 中取消嵌套和批量插入

问题描述

我正在尝试使用单个命令进行批量插入。它适用于 int/string 等简单值,但在插入到 jsonb 列时失败了。

我的表格示例:

CREATE TABLE data_table2 (id INTEGER NOT NULL,name TEXT NOT NULL,test jsonb,bar jsonb)

我来自 .NET 的查询(在没有 @c 参数的情况下使用时效果很好):

"INSERT INTO data_table2 (id,name,test,bar) SELECT * FROM unnest(@a,@b,@c,@d)"

我正在像这样创建 @a 参数:new NpgsqlParameter<int[]>(name,value) 这导致逐行插入(就像我想要的那样)。现在,当我添加一个 @c jsonb 参数时,它失败了,而不是逐行插入,我得到一个错误 42883: function pg_catalog.unnest(jsonb) does not exist,这是一个谎言,因为我之前只能为 id/string 插入它。 .net 中的第三个参数如下所示:

new NpgsqlParameter<string[]>(name,NpgsqlTypes.NpgsqlDbType.Jsonb) { Value = value.ToJson() }

ToJson 方法正在做:

value.Select(x => Newtonsoft.Json.JsonConvert.SerializeObject(x,Newtonsoft.Json.Formatting.None,new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })).ToArray()

我尝试将查询更改为:

"INSERT INTO data_table2 (id,test) SELECT * FROM unnest(@a,ARRAY[@c])" 它有效,但前两列插入没有问题,但第三列只插入了 1 行,其中包含所有结果,其余行为空。

有人可以看看我遗漏了什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)