我对内存表的理解是一个将在内存中创建的表,并且尽可能少地求助于磁盘,如果有的话。我假设我有足够的 RAM 来放置那里的桌子,或者至少是其中的大部分。我不想使用显式函数在内存中加载表(如 pg_prewarm),我只想在我发出CREATE TABLE
or时默认表就在那里CREATE TABLE AS select statement
,除非内存已满或除非我另有说明。我并不特别关心记录到磁盘。
7 年前,这里问了一个类似的问题PostgreSQL 相当于 MySQL 内存表?. 它已收到 2 个答案,其中一个有点晚(4 年后)。
一个答案是创建一个 RAM 磁盘并为其添加一个表空间。或者使用 UNLOGGED 表。或者等待全局临时表。但是,我没有特殊的硬件,我只有普通的 RAM - 所以我不知道该怎么做。我可以使用 UNLOGGED 功能,但据我了解,仍然涉及相当多的磁盘交互(这是我试图减少的),我不确定表是否会默认加载到内存中。此外,我看不出全局临时空间是如何相关的。我对它们的理解是,它们只是可以共享的空间中的表格。
另一个答案推荐使用内存列存储引擎。然后使用一个函数将所有内容加载到内存中。我使用这种方法遇到的问题是,所引用的引擎看起来很旧且未维护,我找不到任何其他引擎。另外,我希望我不必明确诉诸使用“加载到内存”功能,而是默认情况下一切都会发生。
我只是想知道如何在 7 年后的 Postgres 12 中获取内存表。