Выполнение больших запросов в жидкости - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь обновить столбец в одной из моих таблиц с помощью запроса на обновление, подобного следующему:

update table_name set field='some jsonb operation()';

В этой таблице более 300 тыс. Строк. Мне нужно обновить все строки. Я добавил набор изменений в liquibase с помощью этого запроса на обновление. Но когда я пытаюсь выполнить, я получаю ошибку тайм-аута соединения, потому что операция обновления занимает 2-3 минуты. Это разовое занятие. Как я могу эффективно выполнить запрос без ошибки тайм-аута. Я думал о разделении данных и применить обновление. Это решит мою проблему? или любой другой лучший способ сделать это?

1 Ответ

1 голос
/ 23 января 2020

Я не эксперт postgresql, но если вы делаете это с типом изменения <sql> или <sqlFile>, кажется, что вы могли бы добавить к фактическому запросу SET statement_timeout = 600000, чтобы установить время ожидания оператора для этого сессия. Время ожидания указывается в миллисекундах, поэтому приведенный пример будет длиться 10 минут.

Я думаю, что набор изменений должен выглядеть примерно так:

<changeSet id="update-the-things" author="antony">
  <sql splitStatements="true" endDelimiter=";">
    SET statement_timeout = 600000;
    update table_name set field='some jsonb operation()';
  </sql>
</changeSet>
...