我有一个实体,它有两个jsonb列:"options"和"features"。我想从options列中的字段复制数据到features中的两个级别的字段。我尝试过:
UPDATE entity
SET features = jsonb_set( features
, '{informations}'
, "features"->'informations'
||'{"test": "options"->'test'}'
, true);
字符串
但是我在尝试运行迁移时遇到了这个错误:
QueryFailedError: syntax error at or near "test"
型
我认为{}和test周围的简单引号会产生错误。
我该怎么做?
仅供参考:反向迁移与以下各项完美配合:
UPDATE entity
SET options = jsonb_set( options
, '{test}'
, features->'informations'->'test'
, true);
型
因为这里没有嵌套的简单引号。
2条答案
按热度按时间8iwquhpp1#
你只需要其中的几个引号,你还需要将提取的内容用括号括起来,否则它们将以一种不直观的顺序从左到右进行计算:db<>fiddle demo
| 特征|选项|
| --|--|
| { “信息”:{ “features_k121”:121, “features_k122”:{ “features_k131”:131 } }, “features_k111”:11个文件夹|{1} “test”:{ “options_key221”:221 }, “options_key211”:211个文件夹|
字符串
| 特征|选项|
| --|--|
| { “信息”:{ “features_k121”:121, “features_k122”:{ “features_k131”:131 }, “options_key221”:221 }, “features_k111”:11个文件夹|{1} “test”:{ “options_key221”:221 }, “options_key211”:211个文件夹|
这是假设你想从
options
* 中的 * 字段**复制数据 *。如果你想复制 * 整个字段 *,你可以使用下面的查询,但请注意这不是一回事:型
| 特征|选项|
| --|--|
| { “信息”:{ “test”:{ “options_key221”:221 }, “features_k121”:121, “features_k122”:{ “features_k131”:131 }, “options_key221”:221 }, “features_k111”:11个文件夹|{1} “test”:{ “options_key221”:221 }, “options_key211”:211个文件夹|
我所指的非直观行为是这样的(如the demo所示):
型
被这样评价:
型
而不是像这样
型
dfty9e192#
解决办法是:
字符串