вставка postgresql при обновлении таблицы - PullRequest
0 голосов
/ 25 сентября 2018

У меня большая таблица, и я запускаю запрос на обновление для всех строк:

UPDATE <table> SET column1 = column1 - interval '3 hours'

И этот запрос выполняется долго (18 часов).
Так что пока этот запросмне нужно вставить новые строки в эту таблицу.
Будет ли конфликт?Будет ли запрос на обновление пытаться обновить новые строки?(Я не хочу этого)

Также я пытаюсь выбрать в этой таблице, чтобы проверить, сколько строк уже обновлено.
И кажется, что минимум строк.

Будет ли Postgres обновлять все это в конце или оно должно обновляться непрерывно, и я должен видеть изменения, выбирая?

Если я отменяю запрос на обновление, правильно ли, что некоторые строки должны быть обновлены инекоторые нет?
И если это правильно, postgres обновляет его по порядку, увеличивая id, или это случайно?

1 Ответ

0 голосов
/ 25 сентября 2018
  1. PostgreSQL обычно обновляет строки в физическом порядке, то есть в «случайном» порядке (поскольку физический порядок может меняться в любое время).

  2. UPDATE не будет блокировать одновременные INSERT с.

  3. UPDATE будет обрабатывать только те строки, которые были зафиксированы во время его запуска, поэтому он не будетвлияет на все новые добавленные строки.

  4. Измененные строки не будут видны для одновременных сеансов до завершения транзакции обновления.

  5. Если вы прерветеUPDATE, все его эффекты отменены.

Все эти (кроме первого) являются свойствами транзакций базы данных на уровне изоляции READ COMMITTED;Вы можете прочитать о управлении параллелизмом в документации.

...