Как откатить обновление в PostgreSQL

при редактировании некоторых записей в моей базе данных PostgreSQL с использованием sql в терминале (в ubuntu lucid) я сделал неправильное обновление.

вместо -

update mytable set start_time='13:06:00' where id=123;

Я набрал -

update mytable set start_time='13:06:00';

Итак, все записи теперь имеют одинаковое значение start_time.

есть ли способ отменить это изменение? В таблице есть около 500 + записей, и я не знаю, какое значение start_time для каждой записи было

это потеряно навсегда?

2 ответов


Я предполагаю, что это была транзакция, которая уже совершена? Если это так, то это то, что означает" совершить", вы не можете вернуться.

некоторые данные могут быть восстановлены, если Вам ПОВЕЗЕТ. Остановите базу данных.

вот ответ, который я написал на ту же тему ранее. Надеюсь, это поможет.

Это тоже может быть:удаленные строки в postgresql .

Если данные не являются абсолютно критическими, просто восстановите из резервных копий, это будет намного легче и менее болезненно. Если у вас не было резервных копий, считайте, что вы сильно ударились.


Если вы поймаете ошибку и сразу же сбить любые приложения, использующие базу данных и принять его в автономном режиме, вы можете потенциально использовать точку во времени восстановления (PITR), чтобы воспроизвести ваши записи вперед журнала (WAL) файлы до, но не включая, момент, когда ошибка транзакции была сделана. Это приведет к возвращению базы данных в состояние, в котором она находилась до этого, что фактически "отменит" эту транзакцию.

в качестве подхода для базы данных производственного приложения он имеет ряд очевидных ограничения, но есть обстоятельства, в которых PITR может быть лучшим вариантом, особенно когда произошла критическая потеря данных. Однако это не имеет значения, если архивация не была настроена до события повреждения.

https://www.postgresql.org/docs/current/static/continuous-archiving.html

аналогичные возможности существуют и в других ядрах реляционных баз данных.