PostgreSQL 有相当于 MySQL 的内存表吗?
这些 MySQL 内存表可以跨会话持续存在(即,不同于在会话结束时丢弃的临时表)。我找不到任何可以用 PostgreSQL 做同样事情的东西。
PostgreSQL 有相当于 MySQL 的内存表吗?
这些 MySQL 内存表可以跨会话持续存在(即,不同于在会话结束时丢弃的临时表)。我找不到任何可以用 PostgreSQL 做同样事情的东西。
不,目前它们在 PostgreSQL 中不存在。如果你真的需要一个内存表,你可以创建一个 RAM 磁盘,为它添加一个表空间,然后在上面创建表。
如果您只需要在不同会话之间可见的临时表,则可以使用UNLOGGED
table。这些不是真正的内存表,但当表数据明显小于系统 RAM 时,它们的行为会惊人地相似。
全局临时表是另一种选择,但在 PostgreSQL 9.2 中不支持(见注释)。
回答一个四年前的问题,但因为它现在仍然在谷歌搜索结果的顶部。
没有在内存中缓存完整表的内置方法,但是有一个扩展可以做到这一点。
In Memory Column Store是一个库,它充当扩展插件以及列式存储和执行引擎。您可以在此处参考文档。有一个加载函数可用于将整个表加载到内存中。
优点是表存储在 postgres shared_buffers 中,因此当执行查询时,postgres 会立即感知到页面在内存中并从那里获取。
缺点是 shared_buffers 并没有真正设计为以这种方式运行,并且可能会发生不稳定(通常不会发生),但是为了安全起见,您可能可以在具有此配置的辅助集群/机器中使用它。
关于 postgres 和 shared_buffers 的所有其他常见警告仍然适用。