У меня есть тестовая база данных, подключенная к тестовому серверу. Я хочу запустить набор тестов на селен, и мне нужно восстанавливать базу данных после каждого теста.
Я сделал резервную копию с помощью команды cli «createb» и просто каждый раз сбрасываю основную таблицу, но как я могу восстановить базу данных, не выключая и не выключая весь сервер (не могу использовать createb с любыми открытыми соединениями), так как для этого потребуется часы или дни, чтобы сделать полный набор тестов?
Мне, вероятно, не будет предоставлен постоянный доступ администратора к серверу, если в этом нет необходимости.
4 ответа
Вы можете уничтожить все соединения с помощью SQL (см. https://stackoverflow.com/a/5109190/2352344). Вместо удаления всей базы данных вы можете просто удалить схему:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
Я решил проблему, создав 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"
Мне пришлось использовать скрипт, а не просто указывать аргументы в аргументах, вероятно, из-за знака «<». Я не нашел замены флага этому.
Я думаю, что вместо удаления таблицы, как насчет удаления или удаления строк в таблице. Когда вы запускаете тест, вы знаете, какие записи будут внесены в таблицу. С этой информацией, непосредственно перед завершением теста, вызовите скрипт для удаления строк, созданных в результате выполнения этого теста.
Вы можете использовать реальный инструмент для резервного копирования / восстановления (Wal-E, бармен или спинка). В частности, с помощью backrest вы можете выполнять восстановление diff, когда оно восстанавливает только те файлы, которые имеют изменения.
Новые вопросы
postgresql
PostgreSQL - это система управления объектно-реляционными базами данных с открытым исходным кодом (ORDBMS), доступная для всех основных платформ, включая Linux, UNIX, Windows и OS X. Пожалуйста, указывайте свою точную версию Postgres, задавая вопросы. Вопросы, касающиеся администрирования или расширенных функций, лучше всего направлять на dba.stackexchange.com.