PostgreSQL:将数据从json插入表中

PostgreSQL:将数据从json插入表中,第1张

概述现在我用来手动解析json到插入字符串 insert into Table (field1, field2) values (val1, val2) 但它不舒服的方法从json插入数据! 我发现函数json_populate_record并尝试使用它: create table test (id serial, name varchar(50));insert into test select 现在我用来手动解析Json到插入字符串
insert into table (fIEld1,fIEld2) values (val1,val2)

但它不舒服的方法从Json插入数据!
我发现函数Json_populate_record并尝试使用它:

create table test (ID serial,name varchar(50));insert into test select * from Json_populate_record(NulL::test,'{"name": "John"}');

但是它失败并显示消息:列“ID”中的空值违反非空约束
PG知道ID是连续的,但是假装是一个傻瓜.与所有违禁品相同.

有没有更优雅的选择将数据从Json插入到表中?

Json_populate_record没有简单的方法返回一个表示“生成此值”的标记.

Postgresql不允许您插入NulL来指定应该生成一个值.如果您要求NulL Pg期望为NulL并且不希望猜测您.另外还有一个没有NOT NulL约束的生成列是完全可以的,在这种情况下,将NulL插入到它是非常好的.

如果你想让Postgresql使用表的默认值来实现这一点:

>从INSERT列列表中省略该行;要么
>明确地写入DEFAulT,它只在VALUES表达式中有效

由于您不能在此使用VALUES(DEFAulT,…),您唯一的选择是从INSERT列列表中省略列:

regress=# create table test (ID serial primary key,name varchar(50));CREATE tableregress=# insert into test(name) select name from Json_populate_record(NulL::test,'{"name": "John"}');INSERT 0 1

是的,这意味着你必须列出列.两次,其实一次在SELECT列表中,一次在INSERT列列表中.

为了避免Postgresql需要一种将DEFAulT指定为记录的值的方式,因此对于未定义的列,Json_populate_record可能返回DEFAulT而不是NulL.这可能不是您对所有列的打算,并且会导致在Json_populate_record未被用于INSERT表达式时如何处理DEFAulT的问题.

所以我猜Json_populate_record可能不如你希望使用生成的键的行有用.

总结

以上是内存溢出为你收集整理的PostgreSQL:将数据从json插入表中全部内容,希望文章能够帮你解决PostgreSQL:将数据从json插入表中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存