如何恢复数据库运行时
How to restore a database runtime
我有一个连接到测试服务器的测试数据库。我想要 运行 组 selenium 测试,我必须在每次测试后恢复数据库。
我用 cli 命令 "createdb" 做了一个备份,我每次都删除主 table,但是我如何在不关闭和打开整个服务器的情况下恢复数据库(不能使用createdb 与任何打开的连接),因为进行全套测试需要数小时或数天?
我可能不会获得对服务器的持续管理员访问权限,除非有必要。
您可以终止与 SQL 的所有连接(参见 )。您可以删除架构,而不是删除整个数据库:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
我认为与其删除 table,不如撤消或删除 table 中的行怎么样?当您 运行 测试时,您知道将在 Table 中创建哪些条目。有了这些信息,就在测试终止之前,调用一个脚本来删除由于 运行 执行此测试而创建的行。
您可以为您的 backup/restore 使用真正的工具(Wal-E、酒保或靠背)。特别是对于靠背,您可以进行差异还原,它只还原有更改的文件。
我通过从 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 中使用它作为参数,可能是因为“<”符号。我没有找到它的替代标志。
我有一个连接到测试服务器的测试数据库。我想要 运行 组 selenium 测试,我必须在每次测试后恢复数据库。
我用 cli 命令 "createdb" 做了一个备份,我每次都删除主 table,但是我如何在不关闭和打开整个服务器的情况下恢复数据库(不能使用createdb 与任何打开的连接),因为进行全套测试需要数小时或数天?
我可能不会获得对服务器的持续管理员访问权限,除非有必要。
您可以终止与 SQL 的所有连接(参见 )。您可以删除架构,而不是删除整个数据库:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
我认为与其删除 table,不如撤消或删除 table 中的行怎么样?当您 运行 测试时,您知道将在 Table 中创建哪些条目。有了这些信息,就在测试终止之前,调用一个脚本来删除由于 运行 执行此测试而创建的行。
您可以为您的 backup/restore 使用真正的工具(Wal-E、酒保或靠背)。特别是对于靠背,您可以进行差异还原,它只还原有更改的文件。
我通过从 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 中使用它作为参数,可能是因为“<”符号。我没有找到它的替代标志。