Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
如何对PostgreSQL执行批更新_Postgresql - Fatal编程技术网

如何对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;