Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jsonb字段中的PostgreSQL重命名属性_Json_Postgresql_Jsonb_Postgresql 9.5 - Fatal编程技术网

jsonb字段中的PostgreSQL重命名属性

jsonb字段中的PostgreSQL重命名属性,json,postgresql,jsonb,postgresql-9.5,Json,Postgresql,Jsonb,Postgresql 9.5,在postgresql 9.5中,是否有方法重命名jsonb字段中的属性 例如: { "nme" : "test" } 应重命名为 { "name" : "test"} 在UPDATE中使用,例如: 我使用以下方法处理嵌套属性并跳过任何不使用旧名称的json: UPDATE table_name SET json_field_name = jsonb_set(json_field_name #- '{path,to,old_name}',

在postgresql 9.5中,是否有方法重命名jsonb字段中的属性

例如:

{ "nme" : "test" }
应重命名为

{ "name" : "test"}

UPDATE
中使用,例如:


我使用以下方法处理嵌套属性并跳过任何不使用旧名称的json:

UPDATE table_name
SET json_field_name = jsonb_set(json_field_name #- '{path,to,old_name}',
                                '{path,to,new_name}',
                                json_field_name#>'{path,to,old_name}')
WHERE json_field_name#>'{path,to}' ? 'old_name';
仅供参考文件:

  • #-
    删除具有指定路径的字段或元素(对于JSON数组,负整数从末尾开始计数)

  • #>
    在指定路径获取JSON对象


如果有人想知道,
返回*
不是查询必须的。它只会显示所有更新的行,也就是说,所有行。@klin:我试过你的查询,它可以工作。但是有没有办法在{}中得到ID,而不是简单地用双引号引用@PranavUnde-请用适当的例子问一个新问题。找到解决方案后,首先添加具有新属性的对象,然后删除现有属性。像这样的<代码>更新示例集js=JSONB_集(js::JSONB,{skill,c++},js->skill'->'c',true),其中js->'skill'?'c′
更新示例集js=js#-'{skill,c}',其中js->'skill'?'c′这太棒了,谢谢!这里有一个Rails ActiveRecord的例子,它可以帮助任何人:看一看字符串替换()添加的类似问题对我来说很有用,尽管我弄乱了
{path,to,old_name}
的第一个条目,但它似乎没有影响结果,我仍然得到了正确的答案thing@MatheusFelipe,你能帮帮我吗。我需要将LicenseDate更改为LicenseExpirationDate更新dbo。“dcp_OrganlevelEntityItems”SET“Attributes”=jsonb_SET(“Attributes”=>“{LicenseDate},{LicenseExpirationDate}”),其中“Id”=1示例JSON-列名是Attributes{“name”:“LIC”,“Street”:223871,“City”:59390,“LicenseDate”:“01092019”}这是更好、更清晰的解决方案
UPDATE table_name
SET json_field_name = jsonb_set(json_field_name #- '{path,to,old_name}',
                                '{path,to,new_name}',
                                json_field_name#>'{path,to,old_name}')
WHERE json_field_name#>'{path,to}' ? 'old_name';