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

Я сделал резервную копию с помощью команды cli «createb» и просто каждый раз сбрасываю основную таблицу, но как я могу восстановить базу данных, не выключая и не выключая весь сервер (не могу использовать createb с любыми открытыми соединениями), так как для этого потребуется часы или дни, чтобы сделать полный набор тестов?

Мне, вероятно, не будет предоставлен постоянный доступ администратора к серверу, если в этом нет необходимости.

2
Marcin Plebanek 1 Сен 2017 в 16:59

4 ответа

Лучший ответ

Вы можете уничтожить все соединения с помощью SQL (см. https://stackoverflow.com/a/5109190/2352344). Вместо удаления всей базы данных вы можете просто удалить схему:

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
1
clemens 1 Сен 2017 в 14:06

Я решил проблему, создав bash-скрипт, который я запускаю из кода Java.

String[] args = new String[]{"./script.sh"};
Process proc = new ProcessBuilder(args).start();
proc.waitFor();

Script.sh :

#!/bin/bash

psql dbname -c "drop schema \"public\" cascade;"
psql dbname -c "create schema \"public\";"
psql dbname < "path/backupname"

Мне пришлось использовать скрипт, а не просто указывать аргументы в аргументах, вероятно, из-за знака «<». Я не нашел замены флага этому.

0
Marcin Plebanek 4 Сен 2017 в 12:29

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

0
Sunil Singhal 1 Сен 2017 в 14:11

Вы можете использовать реальный инструмент для резервного копирования / восстановления (Wal-E, бармен или спинка). В частности, с помощью backrest вы можете выполнять восстановление diff, когда оно восстанавливает только те файлы, которые имеют изменения.

0
Arkhena 1 Сен 2017 в 15:28