我需要一种更有效的方法来更新 Postgres 9.5 中单个表的行。我目前正在使用 pg_dump 执行此操作,并在 Linux 操作系统环境中的搜索和替换操作后使用更新的值重新导入。
table_a有 300000 行,2 列:id bigint和json_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列中的所有键。