postgresql 在节点运行时用于CI/CD目的的内存中的Postgres

2ledvvac  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(109)

我正在寻找一个解决方案,能够启动postgres一样的解决方案,只在内存中运行,能够在管道中运行完整的e2 e测试。我知道有办法启动一个临时数据库并连接到它,但我喜欢https://github.com/nodkz/mongodb-memory-server对mongodb的想法,但对postgres来说。
我无法想象一个流行的和经常使用的数据库没有一个轻量级的内存数据库替代品
我尝试在下面的代码库中使用pg-xml 2,但它并不像预期的那样工作https://github.com/rkristelijn/pg-mem-server。请参阅README了解更多信息。

vuktfyat

vuktfyat1#

我不认为PostgreSQL有内存选项。(看起来pg-mem并不完全支持所有的PostgreSQL语法。在内存中完全重新实现PostgreSQL语言和引擎确实是一项雄心勃勃的任务。)
有几个选项,例如:

内存盘

你可以在一个 ramdisk 分区上初始化集群,使用tmpfs or ramfs on Linux(前者可以使用“交换”内存)。
这可能是最干净的选择,但在设置方面可能会带来一些开销,甚至在内存中。

测试用户模式

另一种选择是保持相同的数据库,删除并重新创建一个以您正在连接的用户命名的模式(假设是默认搜索路径)。这假设您没有在查询中指定模式。
如果您的测试用户名为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模式时不会被擦除。

相关问题