PostgreSQL 相当于 MySQL 内存表?
Posted
技术标签:
【中文标题】PostgreSQL 相当于 MySQL 内存表?【英文标题】:PostgreSQL equivalent of MySQL memory tables? 【发布时间】:2012-07-28 14:30:27 【问题描述】:PostgreSQL 是否有相当于 mysql memory tables 的功能?
这些 MySQL 内存表可以跨会话持续存在(即,不同于在会话结束时删除的临时表)。我还没有找到任何可以用 PostgreSQL 做同样事情的东西。
【问题讨论】:
in-memory table in PostgreSQL的可能重复 我会说这不是重复的。 MySQL 内存表是指比仅在 RAM 磁盘上创建的表更具体的东西:dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html 【参考方案1】:不,目前它们在 PostgreSQL 中不存在。如果您确实需要内存表,您可以创建一个 RAM 磁盘,为其添加 tablespace,然后在其上创建表。
如果您只需要在不同会话之间可见的临时表,您可以使用UNLOGGED
table。这些不是真正的内存表,但当表数据明显小于系统 RAM 时,它们的行为会惊人地相似。
全局临时表是另一种选择,但在 PostgreSQL 9.2 中不支持(请参阅 cmets)。
【讨论】:
我们一直在讨论在 9.3 中添加全局临时表作为一项新功能。在现有版本中,关键字被接受,但被忽略。您可以在 PostgreSQL 中最接近的是UNLOGGED
表。 postgresql.org/docs/current/interactive/sql-createtable.html
哦,我不知道它现在被忽略了……谢谢,我以为已经在工作了。谢谢。
更新了答案以反映 @kgrittn 的 cmets。希望没关系。也添加了一些文档链接。
另外,Postgresql [v10 将提供][1] 可插拔存储引擎(列式、内存中等)[1]:infoq.com/news/2017/04/postgresql-10-features
docs 说您不应该将临时存储用于表空间... “该位置不得位于可移动或临时存储上,因为如果表空间丢失或丢失。”【参考方案2】:
回答一个四年前的问题,但因为它现在仍然出现在谷歌搜索结果的顶部。
没有在内存中缓存完整表的内置方法,但有一个扩展可以做到这一点。
In Memory Column Store 是一个库,可以作为扩展插件,也可以作为列存储和执行引擎。您可以参考here 获取文档。有一个加载函数可以用来将整个表加载到内存中。
优点是表存储在 postgres shared_buffers 中,所以当执行查询时,postgres 会立即感知到页面在内存中并从那里获取。
缺点是 shared_buffers 并没有真正设计为以这种方式运行,并且可能会发生不稳定(通常不会),但为了安全起见,您可能可以在具有此配置的辅助集群/机器中使用它。
关于 postgres 和 shared_buffers 的所有其他常见警告仍然适用。
【讨论】:
以上是关于PostgreSQL 相当于 MySQL 内存表?的主要内容,如果未能解决你的问题,请参考以下文章