仅在内存中运行PostgreSQL

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我想运行一个只在内存中运行的小型PostgreSQL数据库,用于我编写的每个单元测试。例如:

@Before
void setUp() {
    String port = runPostgresOnRandomPort();
    connectTo("postgres://localhost:"+port+"/in_memory_db");
    // ...
}

理想情况下,我将在版本控制中签入一个Postgres可执行文件,单元测试将使用该版本控制。

有点像HSQL但对Postgres来说。我该怎么做?

我能得到这样的Postgres版本吗?我如何指示它不要使用磁盘?

提问于
用户回答回答于

这在Postgres是不可能的。它不提供像HSQLDB或MySQL那样的进程内/内存中引擎。

如想要创建一个独立的环境,则将Postgres二进制文件放入SVN(但它不仅仅是一个可执行文件)。

你需要initdb若要设置测试数据库,请在此之前执行任何操作。这可以通过批处理文件或使用Runtime.exec()来完成。但是请注意,initdb不是快速的。你肯定不想为每个测试运行该程序。不过,可以在测试套件之前运行这个程序。

然而,尽管可以这样做,我还是建议您安装一个专门的Postgres,在运行测试之前只需重新创建测试数据库。

可以使用模板数据库重新创建测试数据库,这使得创建测试数据库的速度相当快(比每次测试运行initdb更快)

用户回答回答于

或者可以创建一个TABLESPACE在ramfs/temfs中创建所有对象。

警告

这可能会危及完整性。

阅读手册中添加的警告。

因此,这只是一次性数据的一种选择。

单元测试应该能正常工作。如果在同一台计算机上运行其他数据库,请确保使用单独的数据库群集(该群集有自己的端口)以确保安全。

扫码关注云+社区