PostgreSQL相当于MySQL内存表?

时间:2012-07-30 21:14:47

标签: mysql postgresql temp-tables

PostgreSQL是否具有等效的MySQL memory tables

这些MySQL内存表可以跨会话持续存在(即,与会话结束时丢弃的临时表不同)。我一直无法找到可以做同样事情的PostgreSQL。

2 个答案:

答案 0 :(得分:36)

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

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

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

答案 1 :(得分:11)

回答了一个有四年历史的问题,但是现在它仍然是google搜索结果。

没有内置方法可以在内存中缓存完整的表,但是有一个扩展可以执行此操作。

In Memory Column Store是一个库,可以作为扩展插件,也可以作为列式存储和执行引擎。您可以参考here获取文档。有一个可用于加载的函数将整个表加载到内存中。

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

缺点是shared_buffers实际上并不是设计为以这种方式运行并且可能发生不稳定(通常它不会发生),但是你可以在具有这种配置的辅助集群/机器中实现这一点。安全

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