是否有可能有一个临时的、动态的、只存在于 RAM 中的 PostgreSQL 表?

use*_*516 5 postgresql memory in-memory-database

我知道 PostgreSQL 仅自动为足够小的表使用 RAM。但我不仅仅谈论表内的数据,而是谈论整个表本身。

基本上,我(很差地)在 PHP 数组中重新实现了各种数据库功能,例如,当我从 API 获取数据并希望在将其显示在控制面板中之前对其进行排序或“按摩”时。在这种情况下,拥有一个仅用于此目的且带有临时数据的实际数据库表是没有意义的(至少对我来说)。如果我可以即时创建一个表,将其填充到 RAM 中,进行排序,然后使用普通的 PG SQL 查询从中获取记录,那就更好了。

这是一件事吗?我有数组结构和各种试图模仿 SQL 的“SORT BY”的函数,这感觉很愚蠢。

当然,我不是在谈论执行CREATE TABLE,向其中添加数据,然后再次返回给 PHP,然后DROP TABLE. 这对于性能来说是非常糟糕的。

如果没有办法做到这一点,我就会接受它,但我常常认为这是非常有意义的。

Erw*_*ter 4

您可能会错过明显的候选者:a TEMPORARY TABLE

如果已通过temp_buffers设置分配了足够的 RAM,则它会驻留在内存中。只有当前会话可以看到它,没有为它写入 WAL(这是它更快的主要原因),并且它会在会话结束时自动删除。

如果它必须在当前会话之后存在,请考虑UNLOGGED TABLE改为。

请注意,临时表不包含在autovacuum. 看:

常规系统目录中仍然有条目,因此它不是 100%“在 RAM 中”。

详细信息请参见 的手册CREATE TABLE