How to restore a database runtime
我有一个连接到测试服务器的测试数据库。 我想运行一组selenium测试,我必须在每次测试后恢复数据库。
我使用cli命令"createdb"进行了备份,我每次只删除主表,但是如何在不关闭和打开整个服务器的情况下恢复数据库(不能使用带有任何打开连接的createdb),因为它需要 几小时或几天进行全套测试?
除非有必要,否则我可能不会获得对服务器的持续管理员访问权限。
您可以终止与SQL的所有连接(请参阅https://stackoverflow.com/a/5109190/2352344)。 您可以删除架构,而不是删除整个数据库:
1 2 | DROP SCHEMA public CASCADE; CREATE SCHEMA public; |
我通过制作一个从java代码运行的bash脚本解决了这个问题。
1 2 3 | String[] args = NEW String[]{"./script.sh"}; Process proc = NEW ProcessBuilder(args).start(); proc.waitFor(); |
script.sh:
1 2 3 4 5 | #!/bin/bash psql dbname -c"drop schema "public" cascade;" psql dbname -c"create schema "public";" psql dbname <"path/backupname" |
我不得不使用脚本而不只是在args中创建参数,可能是因为"<"符号。 我发现它没有替换旗帜。
您可以使用真实工具进行备份/恢复(Wal-E,酒保或靠背)。 特别是对于靠背,您可以执行差异还原,只恢复具有更改的文件。
我认为不是删除表,而是撤消或删除表中的行。 运行测试时,您知道将在表中创建哪些条目。 使用此信息,在测试终止之前,调用脚本以删除由于运行此测试而创建的行。