Я пишу архивный скрипт (на Python с использованием psycopg2), который должен извлечь очень большой объем данных из базы данных PostgreSQL (9.4), обработать, загрузить и затем удалить их из базы данных.
Я запускаю транзакцию, выполняю оператор select для создания именованного курсора, извлекаю N строк за раз из курсора и выполняю обработку и загрузку частей (используя многокомпонентную загрузку S3). Как только курсор исчерпан и ошибок не возникло, я завершаю загрузку и выполняю оператор удаления, используя те же условия, что и при выборе. Если удаление завершается успешно, я фиксирую транзакцию.
В базу данных выполняется активная запись, и важно, чтобы одни и те же строки архивировались и удалялись, а чтение и запись в базу данных (включая архивируемую таблицу) продолжались непрерывно. При этом архивируемые таблицы содержат журналы, поэтому существующие записи никогда не изменяются, а добавляются только новые записи.
Итак вопросы у меня такие:
Какой уровень изоляции следует использовать, чтобы обеспечить архивирование и удаление одних и тех же строк?
Какое влияние эти операции окажут на возможность чтения/записи базы данных? Блокируется ли что-либо на запись или чтение в описанном выше процессе?