我正在寻找一种解决方案,能够启动类似 postgres 的解决方案,该解决方案仅在内存中运行,以便能够在管道中运行完整的 e2e 测试。我知道有多种方法可以启动临时数据库并连接到该数据库,但我喜欢 https://github.com/nodkz/mongodb-memory-server 对于 mongodb 而对于 postgres 的想法。
我无法想象流行且经常使用的数据库没有轻量级内存数据库替代品
我尝试在下面的存储库中使用 pg-mem,但它无法按预期工作https://github.com/rkristelijn/pg-mem-server。请参阅自述文件以获取更多信息。
我认为 PostgreSQL 没有内存选项。 (看起来pg-mem并没有完全支持所有的PostgreSQL语法。在内存中完全重新实现PostgreSQL语言和引擎确实是一项雄心勃勃的任务。)
有几个选项,例如:
您可以在 Linux 上使用 tmpfs
或
ramfs
(前者可以使用“交换”内存)在 ramdisk分区上初始化集群。 这可能是最干净的选项,但在设置方面可能会带来一些开销,甚至在内存中也是如此。
测试用户架构
如果您的测试用户名为
testuser
,您可以在运行每个测试之前删除并创建一个也称为
testuser
的架构:
DROP SCHEMA IF EXISTS testuser CASCADE;
CREATE SCHEMA testuser;
然后,如果您始终连接为 testuser
进行这些测试(请注意不要连接为其他任何内容,以便您不会将任何内容放入
public
模式中),这些查询(没有模式名称)将使用
testuser
架构(并在下次删除该架构时被擦除,如上所述):
CREATE TABLE mytable (id SERIAL PRIMARY KEY, column_a TEXT);
-- Effectively testuser.mytable, instead of public.mytable by default
INSERT INTO mytable(column_a) VALUES ('A');
SELECT id, column_a FROM mytable;
-- ...
只要您不在应用程序中指定架构,这应该可以很好地工作。根据您的应用程序的用途,您实际上可以使用架构(也可能使用公共架构或其他搜索路径),并拥有一些现成可用的数据,当您删除
testuser
架构时,这些数据不会被擦除。这非常依赖于应用程序。