如何还原数据库运行时

时间:2017-09-01 13:59:11

标签: postgresql wildfly postgresql-9.5

我有一个连接到测试服务器的测试数据库。我想运行一组selenium测试,我必须在每次测试后恢复数据库。

我用cli命令做了一个备份" createdb"我每次都只丢弃主表,但是如何在不打开和关闭整个服务器的情况下恢复数据库(不能在任何打开的连接中使用createdb),因为制作全套服务器需要数小时或数天测试?

除非有必要,否则我可能无法获得对服务器的持续管理员访问权限。

4 个答案:

答案 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;标志。我发现没有替换旗帜。