小编Dmi*_*try的帖子

有条件地替换 jsonb 列中每行的单个值

我需要一种更有效的方法来更新 Postgres 9.5 中单个表的行。我目前正在使用 pg_dump 执行此操作,并在 Linux 操作系统环境中的搜索和替换操作后使用更新的值重新导入。

table_a有 300000 行,2 列:id bigintjson_col jsonb. json_col有大约 30 个键:“C1”到“C30”,如本例所示:

Table_A

    id,json_col
    1  {"C1":"Paris","C2":"London","C3":"Berlin","C4":"Tokyo", ... "C30":"Dallas"}
    2  {"C1":"Dublin","C2":"Berlin","C3":"Kiev","C4":"Tokyo", ... "C30":"Phoenix"}
    3  {"C1":"Paris","C2":"London","C3":"Berlin","C4":"Ankara", ... "C30":"Madrid"}
    ...
Run Code Online (Sandbox Code Playgroud)

要求是批量搜索从 C1 到 C30 的所有键,然后在它们中查找值“柏林”并替换为“马德里”,并且仅当马德里不重复时。即 id:1 与密钥 C3,和 id:2 与 C2。id:3 将被跳过,因为 C30 已经存在这个值

它必须在 PostgreSQL 9.5 中的单个 SQL 命令中,一次并考虑jsonb列中的所有键。

sql postgresql replace sql-update jsonb

3
推荐指数
1
解决办法
1326
查看次数

标签 统计

jsonb ×1

postgresql ×1

replace ×1

sql ×1

sql-update ×1