我有一个连接到测试服务器的测试数据库。我想运行一组selenium测试,我必须在每次测试后恢复数据库。
我用cli命令做了一个备份" createdb"我每次都只丢弃主表,但是如何在不打开和关闭整个服务器的情况下恢复数据库(不能在任何打开的连接中使用createdb),因为制作全套服务器需要数小时或数天测试?
除非有必要,否则我可能无法获得对服务器的持续管理员访问权限。
答案 0 :(得分:1)
您可以终止与SQL的所有连接(请参阅https://stackoverflow.com/a/5109190/2352344)。您可以删除架构,而不是删除整个数据库:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
答案 1 :(得分:0)
我认为不是删除表,而是撤消或删除表中的行。运行测试时,您知道将在表中创建哪些条目。有了这些信息,就在测试终止之前,调用脚本删除由于运行此测试而创建的行。
答案 2 :(得分:0)
您可以使用真实工具进行备份/恢复(Wal-E,酒保或靠背)。特别是对于靠背,您可以进行差异还原,只恢复具有更改的文件。
答案 3 :(得分:0)
我通过制作一个从java代码运行的bash脚本解决了这个问题。
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"
我不得不使用脚本,而不仅仅是在args中创建参数,可能是因为&#34;&lt;&#34;标志。我发现没有替换旗帜。