最佳 postgreSQL 读-修改-写行访问

Optimal postgreSQL read-modify-write rows access

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

每条记录需要:

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

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

使用 Npgsql 完成此操作的最有效方法可能是 SELECT,在内存中缓冲结果,迭代它们以计算新值,然后发出准备好的批量更新来更新行(即带有多个 UPDATE ...; UPDATE ... 语句的单个命令)。如果行数过多,可以拆分成几批,即"load x rows, calculate, update those x rows; load next x rows..."。您可以使用 PostgreSQL's cursor functionality 每次加载下 X 行,或者简单地发布新的 SELECTs 并使用 LIMIT/OFFSET 进行分页(可能具有相似的性能)。