使用PostgreSQL回滚到特定时刻

时间:2010-04-18 13:27:57

标签: postgresql

有没有办法回滚到特定的起点。 我正在寻找这样的东西。

启动specific_point;

此后,与SAME登录相关联的其他应用程序将插入&删除数据(带有crud操作的webservices) 大约2分钟做测试。每个webservice调用都被声明为Spring Ws的事务。

之后我想回滚到specific_point以使干净的数据库达到已知的先前状态。

我在想 ROLLBACK TO SAVEPOINT foo;是解决方案,但不幸的是不是吗?

有什么想法吗?

配置:PostgreSQL 8.4 / windows XP

此致

4 个答案:

答案 0 :(得分:1)

两个快速选项:

  1. 使用主数据库作为模板创建临时数据库,完成测试后删除临时数据库。
  2. Table Log可能有助于实施某些内容。

答案 1 :(得分:0)

仅当所有应用程序共享相同的数据库连接时,才可以执行此操作。他们可能不会创建自己的连接。您可以使用连接池执行此操作,只允许一个连接。如果有人可以创建它自己的连接,游戏结束。不同的连接不能共享同一个事务。

答案 2 :(得分:0)

SAVEPOINT仅在一个事务中起作用,这意味着一个连接。

您可以在PITR上构建一些东西,它可以让您在特定时间点执行恢复。您需要一个基本备份才能使用,以及存档的日志文件,但这可以让您前滚到特定的时间点。它并不像你想要的那样“方便”,但它有效。

答案 3 :(得分:0)

我认为类似的要求是出于测试目的。

有以下选择:

  • 在特定时刻,断开所有用户与数据库的连接并对其进行克隆:

    CREATE DATABASE mydb_template
       TEMPLATE mydb
       ALLOW_CONNECTIONS FALSE
       IS_TEMPLATE TRUE;
    
  • 然后让测试完成工作。

  • 要还原数据库,请断开每个人的连接并运行

    CREATE DATABASE mydb TEMPLATE mydb_template;