postgresql - 将 AWS RDS 实例重置为初始状态的最快方法?

标签 postgresql amazon-web-services amazon-rds

我正在尝试在弹性 beantalk 上创建一个简单的 postgres RDS 支持的 CRUD 网络应用程序的暂存版本。此暂存版本的目的是在将这些更改重新部署到生产环境之前,在实现新代码更改时运行集成测试。

我目前遇到的问题是重置暂存堆栈。我想要在集成测试开始时有一个空白的数据库实例。然而,重新部署一个新的 RDS 实例需要几分钟时间,这意味着集成测试需要很长时间(>20 分钟)才能运行。

因为它在 elastic beanstalk 上,它在 VPC 中,因此要使用 SQL 命令重置数据库,CI 服务器似乎必须使用 ssh 隧道做一些棘手的事情,这(至少对我而言)不是那么简单.

有没有一种快速的方法可以将正在运行的 RDS 实例重置为空白状态以进行测试?

最佳答案

我认为您想要的是拥有空白数据库(相对于空白 RDS 实例),这里有几个选项可以做到这一点:

1) IMO 的最佳选择,但可能需要一些编码 - postgresql 支持保存点,因此您可以构建您的测试,它们将始终保持数据库干净(对本地测试也很有用)。这个想法是在开始测试之前创建一个保存点,并在结束时回滚到该保存点。这样,测试所做的所有更改都将被删除。

2) 当您的测试开始时,您可以运行 SQL 命令来删除/创建数据库。您的测试可以连接到数据库,因此您可以通过代码执行此操作,无需通过 ssh 执行此操作。如果数据量较小,可以为每次测试运行创建一个新数据库。您可以将其命名为“mydb20160115101112”(带有当前日期和时间)。

3) 实际上也应该可以从 CI 配置中删除/创建数据库(也不需要 ssh 或其他复杂的东西),您的暂存实例已经可以访问 RDS,因此您可以使用 运行一些 SQL 命令psql,像这样:

psql -c "删除数据库 mydb20160115101112;"--dbname=模板1

要以这种方式使用 psql(无需输入用户名/密码),您需要创建一个与系统用户同名的 postgresql 用户(确保为 CI 使用的系统用户创建一个 postgresql)。

关于postgresql - 将 AWS RDS 实例重置为初始状态的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34818163/

相关文章:

amazon-web-services - 收到检测到验证错误 : Value '[AWS:RDS::DBInstance]' at 'typeNameList' failed

postgresql - Postgres 触发器和生产者(关系的列 "new"不存在)

php - 这些存储方法中哪种最快?

node.js - 如何从 Elastic Beanstalk Docker 应用程序将 node.js 日志发送到 Cloudwatch Logs?

python - 如何解析 boto3 的政策文档响应

mysql - 长时间运行的 mysql "cleaning up"事务

postgresql - AWS RDS Proxy 可以直接与读复制实例配对吗?

sql - 从一个表中选择所有内容,从另一个表中选择一些关于 SQL joining on 2 variables

postgresql - 在 Sequelize 中作为条件使用父模型

postgresql - 在 PostgreSQL 中创建一个自动增加的主键列