将一个表中的值复制并插入到另一个jsonb字段中。

3

请帮我理解如何将一个表中的值复制并插入到另一个jsonb字段中?

additional_info是产品表中的jsonb字段。

dedication, stories, status这些字段来自书籍表,我想将它们复制到additional_info字段中。

我试过了,但显然这不正确。

INSERT INTO products (order_id, name, price, type, additional_info)

SELECT order_id, name, null, 'Book', '{\"dedication\": dedication, \"stories\": stories, \"status\": status }'

FROM books;
2个回答

5

您需要使用jsonb_build_object。在SQL中,\没有特殊含义,在SQL字符串字面量内部不需要\"

INSERT INTO products (order_id, name, price, type, additional_info)
select order_id, 
       name, 
       null, 
       'Book', 
       jsonb_build_object('dedication', dedication, 'stories', stories, 'status', status)
from books

谢谢你的回答! 这段代码我插入到我的Ruby脚本中,所以我需要斜杠 =)这对我来说有效,但是我遇到了这个错误 PG::InvalidParameterValue: ERROR: argument 3 cannot be nullHINT: Object keys should be text. - Paul Ro
这些列是什么数据类型? - user330315
数据类型是字符串。 - Paul Ro
@PaulRo:对我来说可以运行:http://rextester.com/TAQKS11795 这可能与你的运行方式有关。 - user330315

0

像这样的东西。虽然我不确定你是如何使用反斜杠“\”。

INSERT INTO products (order_id, name, price, type, additional_info)

SELECT order_id, name, null, 'Book', json_build_object("dedication\", dedication,  "stories\", stories, "status\", status) AS additional_info

FROM books;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接