我使用postgres库来处理数据库。我有一个非常大的数据库。我需要更改列中的字符。我是这样的:
void replace(String col, String from, String to) async {
String queryStr = "UPDATE $tab SET $col = replace($col, '$from', '$to');";
await connection.query(queryStr);
}
如果数据库的行数超过1,000,000,我将收到错误消息:
未处理的异常:0:00:30.000000之后的TimeoutException:将来不会 已完成 0 _PostgreSQLConnection&Object&_PostgreSQLExecutionContextMixin._enqueue(package:postgres / src / connection.dart:402:24) 1 _PostgreSQLConnection&Object&_PostgreSQLExecutionContextMixin.query(package:postgres / src / connection.dart:318:12) 2个PG.replace(file:///home/vas/IdeaProjects/infovizion_platform/pg/bin/pg.dart:50:22) 3个主要文件(file:///home/vas/IdeaProjects/infovizion_platform/pg/bin/main.dart:81:14) 4 _startIsolate。 (dart:isolate / runtime / libisolate_patch.dart:287:32) 5 _RawReceivePortImpl._handleMessage(dart:isolate / runtime / libisolate_patch.dart:171:12)
当我手动执行相同的请求时,没有错误。
我该如何解决?
答案 0 :(得分:0)
您可以尝试此版本:
UPDATE $tab
SET $col = replace($col, '$from', '$to')
WHERE $col LIKE '%' || '$from' || '%';
也就是说,仅更新实际显示值的列,而不是所有列。
减少实际更改的列数可能会加快查询速度。