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 内存表?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL

postgresql中怎么用psql命令

PostgreSQL-psql常用快捷命令

PostgreSQL 相当于 Pandas 外部合并

postgrepsql 常用命令

相当于 PgAdmin3 中的“描述表”