最佳的PostgreSQL读-修改-写行访问

时间:2019-07-12 03:43:13

标签: c# postgresql npgsql

尝试使用PostgreSQL的Npgsql数据提供程序修改所有表记录中的某些字段。

每条记录需要:

  • 要阅读,
  • 某些字段需要通过C#过程进行修改
  • 然后写回表

是否存在一个对象或机制可以指向每个记录来执行此操作,而无需多个查询来执行对每个记录的读取和写入之间的C#过程调用?

1 个答案:

答案 0 :(得分:0)

如果您正在寻找一种通过打开的游标更新值的方法,以避免额外的UPDATE,那么PostgreSQL中就不存在这种方法。另一方面,我很确定(但不是100%)在其他数据库上,它实际上也不能提高性能,即,每次更新都需要额外的往返。换句话说,“更新游标”以获得SELECT结果可能是API糖,而不是实际的优化。

使用Npgsql完成此操作的最有效方法可能是执行SELECT,在内存中缓冲结果,对它们进行迭代以计算新值,然后发出准备好的批处理更新来更新行(即,一个命令包含多个UPDATE ...; UPDATE ...条语句)。如果行数太大,则可以分为几批,即“加载x行,计算,更新这些x行;加载下x行...”。您可以每次使用PostgreSQL's cursor functionality来加载下X行,或者简单地发布新的SELECT并使用LIMIT / OFFSET进行分页(可能具有相似的性能)。

相关问题