42

PostgreSQL 有相当于 MySQL 的内存表吗?

这些 MySQL 内存表可以跨会话持续存在(即,不同于在会话结束时丢弃的临时表)。我找不到任何可以用 PostgreSQL 做同样事情的东西。

4

2 回答 2

45

不,目前它们在 PostgreSQL 中不存在。如果你真的需要一个内存表,你可以创建一个 RAM 磁盘,为它添加一个表空间,然后在上面创建表。

如果您只需要在不同会话之间可见的临时表,则可以使用UNLOGGEDtable。这些不是真正的内存表,但当表数据明显小于系统 RAM 时,它们的行为会惊人地相似。

全局临时表是另一种选择,但在 PostgreSQL 9.2 中不支持(见注释)。

于 2012-07-30T21:24:36.317 回答
20

回答一个四年前的问题,但因为它现在仍然在谷歌搜索结果的顶部。

没有在内存中缓存完整表的内置方法,但是有一个扩展可以做到这一点。

In Memory Column Store是一个库,它充当扩展插件以及列式存储和执行引擎。您可以在此处参考文档。有一个加载函数可用于将整个表加载到内存中。

优点是表存储在 postgres shared_buffers 中,因此当执行查询时,postgres 会立即感知到页面在内存中并从那里获取。

缺点是 shared_buffers 并没有真正设计为以这种方式运行,并且可能会发生不稳定(通常不会发生),但是为了安全起见,您可能可以在具有此配置的辅助集群/机器中使用它。

关于 postgres 和 shared_buffers 的所有其他常见警告仍然适用。

于 2016-01-06T13:24:56.490 回答