Postgres: как обновить колонку? - PullRequest
0 голосов
/ 30 ноября 2018

Я использую библиотеку 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 строк, я получаю сообщение об ошибке:

Необработанное исключение: TimeoutException после 0: 00: 30.000000: Futureне завершеноhome / vas / IdeaProjects / infovizion_platform / pg / bin / pg.dart: 50: 22) 3 основных (файл: ///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 голосов
/ 30 ноября 2018

Вы можете попробовать эту версию:

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

То есть обновлять только столбцы, в которых действительно отображается значение, а не все столбцы.

Сокращение числа столбцов, которые фактически изменяются, можетускорить запрос.

...