Открыть восстановленный магазин рядом с оригиналом

PostgreSQLBeginner
Практиковаться сейчас

Введение

У PAPER & FORM четыре заказа, но сохранённая копия заканчивается на R-103. Нужно открыть прежнее состояние рядом с оригиналом, прочитать его позиции и доказать, что восстановленный сервис независимо принимает тестовый заказ.

Эта работа начинается отдельно. Исходная база и backups/cutoff.dump уже подготовлены с той же точкой из трёх заказов, что в предыдущем руководстве. Нужны базовые навыки терминала; понятия баз и соединений объясняются заново. Команды выполняйте в Workstation, оригинал смотрите в Original Shop, тестовую цель — в Restored Copy.

Восстанавливать и сбрасывать разрешено только одноразовую базу shop_copy. Сохраните источник, готовую программу, архив и посторонний файл в uploads/. Все данные вымышлены, платежей и почты нет. Две базы на одном учебном экземпляре демонстрируют логический экспорт и изоляцию, не полное аварийное восстановление, аппаратную избыточность или PITR.

Восстановить только в пустую независимую цель

На этом шаге вы откроете работающую копию граничных заказов. Откройте Original Shop, затем Orders. Там четыре записи, R-101—R-104. В R-103 у Rae два Print pair на $36.00. R-104 принадлежит Sol и добавлен после сохранённой точки. Он должен остаться в оригинале, но отсутствовать в восстанавливаемом архиве.

Откройте Restored Copy. Полоса ржавого цвета называет shop_copy. Главная страница работает, но Orders объясняет, что независимая база пуста. Одна доступная главная страница не доказывает восстановление магазина.

Перейдите в Workstation. pwd выводит текущий каталог:

pwd
/home/labex/project/shop-backup

./shopctl identity читает реальные соединения. Сохранённые сервисы задают базу, хост, порт и аккаунт: shop-source подключает shop_source как читающий d09_reader; shop-copy подключает shop_copy как доступный для записи d09_copy. Они используют сервер 127.0.0.1:5432, но роль копии не подключается к источнику:

./shopctl identity

pg_restore --list читает специальный архив, не записывая в базу. Проверьте исходное имя и записи orders и order_items:

pg_restore --list backups/cutoff.dump

База хранит структурированные данные; строки позиций связаны с родительским заказом. Специальные архивы содержат определения, данные, последовательности для новых идентификаторов и ограничения связей. Их восстанавливают через pg_restore, а не отправкой бинарного файла в psql. Подготовленные клиенты выгрузки и восстановления — PostgreSQL 14.

Действие empty показывает настоящую целевую базу и отклоняет базу с пользовательскими таблицами или последовательностями. В непустом назначении может быть нужная работа. Не используйте --clean или --create: они могут удалить объекты либо выбрать исходное имя базы из архива.

В следующей команде && запускает правую часть только после успешной проверки пустоты. --dbname=service=shop-copy явно выбирает независимую цель. --no-owner --no-privileges исключает импорт исходных аккаунтов и разрешений. --single-transaction объединяет импорт в целое: ошибка откатывает его. --exit-on-error останавливается при первой ошибке базы. Запустите всю защищённую команду:

./shopctl empty && pg_restore --dbname=service=shop-copy --no-owner --no-privileges --single-transaction --exit-on-error backups/cutoff.dump

Сначала появится назначение, затем EMPTY: restore may proceed. Успешный pg_restore обычно молчит. Если повтор даёт REFUSED: target is not empty, первый импорт мог уже завершиться. Прочитайте копию, прежде чем что-либо сбрасывать.

records copy читает реальные связанные строки заказов и позиций:

./shopctl records copy

Ожидаются R-101, R-102 и R-103 на $98.00, без R-104. В Restored Copy откройте Orders, R-103 и квитанцию. Два Print pair и $36.00 должны присутствовать. Вернитесь в Original Shop: заказ R-104 от Sol сохранился, все заказы по-прежнему дают $124.00.

Если выбран неверный архив или нужно повторить неудачу, сбрасывайте только одноразовую цель этого курса. Помощник показывает назначение и требует точное имя. Следующая команда — необязательное восстановление после ошибки, не действие после каждого успеха:

./shopctl reset-copy shop_copy

Она удаляет только shop_copy. После этого повторите защищённый импорт. Никогда не сбрасывайте и не удаляйте оригинал, не применяйте массовые очистки баз. Проверка наблюдает настоящую копию, а не восстанавливает её за вас.

Доказать запись в копию без изменения оригинала

На этом шаге вы проверите настоящую запись в копию. Читающая страница может выглядеть верно при сломанной последовательности, связях или соединении для записи. Создайте реальный тестовый заказ в независимой копии и сравните магазины. Оставайтесь в Restored Copy, откройте Collection и найдите форму. Перед отправкой прочитайте Writing to: shop_copy · RESTORED COPY и полосу ржавого цвета. Не отправляйте тест в Original Shop.

Введите точно:

Поле Значение
Reference R-901
Name Copy test
Item Print pair
Quantity 1

Нажмите Place order ↗. R-901 содержит один товар на $18.00. Скачайте квитанцию и найдите shop_copy. Новый заказ использует восстановленную последовательность и внешний ключ, а не заранее написанную страницу. Повтор номера даёт Already recorded вместо второго заказа.

Откройте Orders в той же копии. Должны быть R-101, R-102, R-103 и R-901, без R-104. В Original Shop откройте Orders: там остаются R-101—R-104 без R-901. Разных полос недостаточно, если оба приложения пишут в одну базу.

В Workstation покажите оба соединения и прочитайте реальные наборы данных:

./shopctl identity
./shopctl records copy
./shopctl records source

Итог копии — $116.00, источника — по-прежнему $124.00. Требовать постоянного равенства всех строк неверно: R-104 относится только к позднему источнику, R-901 — только к восстановленной копии. Сравнивайте общие граничные записи и допустимое различие каждой стороны.

Оригинальная форма отклоняет R-901 без записи. Если открыли не ту вкладку, прочитайте Check the destination, перейдите в Restored Copy и отправьте там. Неизвестные номера также отклоняются: исправьте форму и повторите. Если в существующем R-901 неверны имя, товар или количество, ./shopctl correct copy R-901 показывает реальную цель и исправляет только этот тест на Copy test / Print pair / 1. Другие заказы копии и все исходные данные остаются неизменными. Если чистый повтор нужен лишь одноразовой копии, используйте точное восстановление reset-copy shop_copy из шага 1, импортируйте заново и добавьте тест один раз.

Финальная проверка читает действующие базы и сайты, сохраняет постороннюю загрузку и испытывает архив в отдельной одноразовой базе. Она не создаёт тестовый заказ и не чинит копию. Теперь резервная копия подтверждена полными данными, ясной границей и независимым восстановлением с записью.

Резюме

Вы определили реальные источник и цель, защитили пустое назначение, транзакционно восстановили специальный архив и прочитали полные позиции заказов. Новый заказ только в копии доказал независимость и возможность записи, а оригинал сохранил поздний заказ. Это доказательство репетиции логического восстановления, не полной стратегии восстановления рабочей среды.