Здравствуйте, Gt_, Вы писали:
G>>Вот ты начинаешь копировать данные в момент Х, а за это время пользователи вносят изменения в объеме dX.
G>>Должен ли этот dX попасть в бекап?
G>>1) если нет, и вам нужна консистентность на момент X, то придется заблокировать всех (делает pg_dump)
Gt_>да ладно. быть не может что бы так проигрывал конкурентам. PG классический версионник, в чем там может быть сложность вычитать таблицу на момент X без блокировок ?
Да вычитать то не проблема. Проблема в том, что за время бекапа таблица не должна поменяться. А то ты скопировал первые 1000 строк, другой пользователь сфорировал из них частичные суммы дописал в конец, а пока копировал вторую тысячу первую тысячу удалил.
Gt_>в доке тоже говориться что без локов обходиться:
Gt_>pg_dump is a utility for backing up a PostgreSQL database. It makes consistent backups even if the database is being used concurrently. pg_dump does not block other users accessing the database (readers or writers).
Gt_>https://www.postgresql.org/docs/current/app-pgdump.html
Внезапно написанное не означает что без локов. Написанное означает что ты можешь выполнить запрос на чтение или запись и он выполнится. Не уточняя что иногда может выполнится после окончания бекапа.
pg_dump такто навешивает локи на таблицы во время бекапа, а некоторых режимах просто падает если таблица поменяется за время бекапа.