Postgres:如何更新列?

时间:2018-11-30 07:33:58

标签: sql database postgresql dart dart-pub

我使用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)

当我手动执行相同的请求时,没有错误。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您可以尝试此版本:

UPDATE $tab
    SET $col = replace($col, '$from', '$to')
    WHERE $col LIKE '%' || '$from' || '%';

也就是说,仅更新实际显示值的列,而不是所有列。

减少实际更改的列数可能会加快查询速度。