如何对PostgreSQL执行批更新
我的旧数据库由映射表如何对PostgreSQL执行批更新,postgresql,Postgresql,我的旧数据库由映射表“glog\u wlog”组成。现在我需要改变它所指的方式。以上代码工作正常。但是限制5真的没有任何作用。我的表中有100多万重编码。我不想一次就把它们全部转换过来。那么,如何将其分解为任何给定的数字呢?您可以使用CTE来限制您正在查看的记录,以完成此类子集 例如: 这种方法使用wlog_targets CTE提取要处理的wlog记录的一小部分 如果所选的5条记录在glog_wlog中没有条目,则不会更新任何内容。此外,CTE没有排序,因此它可能是返回的任何5条记录。子查询似
“glog\u wlog”
组成。现在我需要改变它所指的方式。以上代码工作正常。但是限制5真的没有任何作用。我的表中有100多万重编码。我不想一次就把它们全部转换过来。那么,如何将其分解为任何给定的数字呢?您可以使用CTE来限制您正在查看的记录,以完成此类子集
例如:
这种方法使用wlog_targets CTE提取要处理的wlog记录的一小部分
如果所选的5条记录在glog_wlog中没有条目,则不会更新任何内容。此外,CTE没有排序,因此它可能是返回的任何5条记录。子查询似乎返回1行,因为在其他情况下,您将得到一个错误。请使用
更新。。。从
;请参阅手册中的更新。没有限制子句,但可以使用WHERE
子句按ID范围进行筛选。
UPDATE wlog
SET g_log = ( SELECT glog_id
FROM glog_wlog
WHERE w_id=wlog.id limit 5)
WHERE g_log is NULL;
with wlog_targets as (
select id from wlog
where g_log is null
limit 5)
update wlog
set
g_log = g.glog_id
from wlog_targets w
inner join glog_wlog g
on w.id = g.w_id
where
wlog.id = w.id;