关于postgresql:如何恢复数据库运行时

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,酒保或靠背)。 特别是对于靠背,您可以执行差异还原,只恢复具有更改的文件。


我认为不是删除表,而是撤消或删除表中的行。 运行测试时,您知道将在表中创建哪些条目。 使用此信息,在测试终止之前,调用脚本以删除由于运行此测试而创建的行。