如何更新 PostgreSQL 中的大量行?

2024-01-27

我需要更新表中的数千行。例如,我有 1000 行,id 为 - 1, 2.. 1000:

mytable:
| id   | value1 | value2 |
|  1   |  Null  |  Null  |
|  2   |  Null  |  Null  |
...
| 1000 |  Null  |  Null  |

现在我需要更改前 10 行。我可以这样做:

UPDATE mytable SET value1=42, value2=111 WHERE id=1
...
UPDATE mytable SET value1=42, value2=111 WHERE id=10

这需要很多请求,而且速度不是很快,所以我决定进行此优化:

UPDATE mytable SET value1=42  WHERE id in (1, 2, 3.. 10)
UPDATE mytable SET value2=111 WHERE id in (1, 2, 3.. 10)

Note: 在这种情况下我实际上可以写SET value1=42, value2=111但在现实世界的应用程序中,这组 id 并不相同,对于一行,我需要设置 value1,对于其他行,我需要设置 value2,对于行的某些子集,我需要设置两者。因此我需要两个查询。

问题是我有大量的 id。这个查询大约有 1Mb!

Q1:这是优化此更新的正确方法吗?

Q2: 发送这么大的查询是否正确?我可以通过将此查询分成几个较小的部分来获得更快的更新吗?

我不能使用where声明,我的程序中有很多行 ID。


创建一个临时表 http://www.postgresql.org/docs/current/static/sql-createtable.html并用您的目标 ID 和新值填充它。然后使用使用 FROM 更新 http://www.postgresql.org/docs/current/static/sql-update.html子句来加入该目标并在单个命令中执行此操作。

一般来说,每当你有大量的 id/值时,如果你先将它们移入数据库,那么生活会变得更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更新 PostgreSQL 中的大量行? 的相关文章

随机推荐

  • 您不能对同一个动态路径 Nextjs 使用不同的 slug 名称

    我在我的项目中使用基于文件夹结构的 nextjs 默认动态路由技术 我有一条路线是 pages language location location id 现在我遇到一个用例 除了最后一个参数之外 我需要与上面的路由完全相同 locatio
  • C#:从正文和文件中将模型发布为 MultipartFormDataContent

    我正在寻找一种在一个请求中发送模型和图像的方法 我尝试从正文发送我的模型 但我不知道如何发送文件 除了在不同的文件中发送图像和模型之外 还有其他方法吗 这是我的 API 中的 POST 方法 HttpPost Route UploadNew
  • 如何使用 Python 从 Firebase 存储中检索图像?

    我已经将图像存储到 Firebase Storage 我需要使用 Python 代码将其取出 我可以使用任何 URL 检索图像吗 或者有什么办法可以找回来吗 以下是我如何将其存储在 Firebase Storage 中的图像 这就是我用的
  • 使用 Vaadin 从菜单栏打开 pdf 文件

    我的 vaadin 应用程序中有一个菜单栏 并且想要添加一个项目来打开 pdf 文件 这是浏览器的新选项卡 我找到了一些使用按钮打开文件的解决方案 但我必须使用 MenuItem MenuBar Command commandHandler
  • 如何从 ASP.NET 5 MVC 6 控制器操作返回 XML

    如何从控制器操作返回 XML 即使我添加标题Accept application xml它返回一个 JSON 对象 MVC 5 中的 WebApi 控制器支持这一点 我需要做什么才能使其在 MVC 6 中工作 Microsoft 删除了 X
  • 在 iPad 中重新定向期间在视图中定位对象

    iPad 专家 苹果希望我们支持所有方向 我认为这意味着特定的布局应该旋转 以便所有对象的位置相对相同 或者 如果看起来不太好 那么它们应该重新定位 或者应该设计和构建两个视图 如果我依赖内置的旋转机制 对象要么会调整大小 要么以一个方向或
  • 如何在 extjs 网格(单元格编辑)中显示完整列可编辑?

    我正在使用单元格编辑插件来编辑单元格 但这就像当我们单击该列时 它将进入编辑模式 我想显示带有可编辑文本框的完整列 目前我正在使用以下代码使其可编辑 selType cellmodel plugins Ext create Ext grid
  • Gradle 禁用所有增量编译和并行构建

    在一小部分 sbt 项目中 我们需要 protobuf grpc 编译 并且因为只有 Gradle 对此有正常支持 所以我们用它来执行 protobuf 相关任务 有时它会随机失败编译相同的东西 但重试时会成功 我们确定这是因为增量 Jav
  • Firestore:多个条件 where 子句

    例如 我的图书列表有动态过滤器 我可以在其中设置特定的颜色 作者和类别 该过滤器可以一次设置多种颜色和多个类别 Book gt Red Blue gt Adventure Detective 如何有条件地添加 where firebase
  • 使用 PHP 获取 DOM 元素

    我正在努力理解如何在 PHP 中使用 DOMElement 对象 我找到了这段代码 但我不确定它是否适用于我 dom new DOMDocument dom gt loadHTML index php div dom gt getEleme
  • 查看已完成的 Elasticsearch 任务

    我正在尝试使用 Elasticsearch 的更新查询 API 来运行日常任务 我可以找到当前正在运行的任务 但需要一种方法来查看所有任务 包括已完成的任务 我已经查看了 Update By Query API 的 ES 文档 https
  • 在 BeautifulSoup 中使用多个条件

    我们使用此代码查找包含文本 Fiscal 的标签 soup find class label text re compile Fiscal 我如何在这里放置多个条件 假设标签都包含 财政 和 年度 或者包含 财政 而不是 年份 的标签 如果
  • Android 如何在安排后更改 TimerTask 间隔?

    timerUploadTime new Timer timerUploadTimeTask new TimerTask Override public void run mHandler post new Runnable Override
  • Google 测试输出报告附加

    我在 VC 中使用 GTest 进行单元测试 我有5套测试服 我想生成 Google 测试返回的结果的测试报告 我在 InitGoogleTest 方法之前使用了 testing GTEST FLAGS output xml filenam
  • Sailsjs 套接字 IO

    我是 SailsJs 和 Socket IO 的新手 我想在 Sailsjs 中执行下面的 Socket IO 示例 在服务器端 我需要执行以下代码 但我不知道该代码放在哪里 var io require socket io listen
  • 我已抑制 knit 输出中的警告,但警告并未按预期显示在 Rmarkdown 控制台中。我该如何看待这些?

    我正在使用 Knit 和 rmarkdown 我在 pdf 输出中抑制了警告 然后通常警告会在 rmarkdown 控制台中列出 然而 在一份特定报告的情况下 我没有得到 rmarkdown 控制台中列出的警告 而是收到以下消息 有 15
  • 具有紧轴和匹配纵横比的散景图像图

    我在 Django 应用程序中使用 bokeh 1 0 1 版本 我想将微观表面图像显示为具有颜色编码高度和颜色条的可缩放图像图 原则上这是可行的 但我在获取具有正确纵横比的绘图时遇到问题 仅显示图像而周围没有空间 这是我想要实现的示例 结
  • 什么是服务总线?我什么时候需要服务总线?

    我听说过关于N服务总线 http particular net nservicebus 但我还没有真正理解它是什么 他们声称自己是 最流行的 net 开源服务总线 什么是服务总线 我什么时候需要服务总线 您可以将服务总线视为 SOA 面向服
  • 通过虚拟地址刷新/无效范围; ARMv8;缓存;

    我正在为 32 位模式下运行的 ARMv8 Cortex A53 实现缓存维护功能 当我尝试使用虚拟地址 VA 刷新内存区域时出现问题 DCacheFlushByRange看起来像这样 some init kDCacheL1 0 kDCac
  • 如何更新 PostgreSQL 中的大量行?

    我需要更新表中的数千行 例如 我有 1000 行 id 为 1 2 1000 mytable id value1 value2 1 Null Null 2 Null Null 1000 Null Null 现在我需要更改前 10 行 我可以