问题描述
我正在尝试使用单个命令进行批量插入。它适用于 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 (将#修改为@)