Эквивалент PostgreSQL таблиц памяти MySQL?
Имеет ли PostgreSQL эквивалент MySQL таблицы памяти?
Эти таблицы памяти MySQL могут сохраняться в сеансах (т.е. отличаются от временных таблиц, которые выпадают в конце сеанса). Я не смог ничего найти с PostgreSQL, который может сделать то же самое.
Ответы
Ответ 1
Нет, на данный момент они не существуют в PostgreSQL. Если вам действительно нужна таблица памяти, вы можете создать RAM-диск, добавьте tablespace и создайте на нем таблицы.
Если вам нужна только временная таблица, которая видна между различными сеансами, вы можете использовать таблицу UNLOGGED
. Это не настоящие таблицы памяти, но они будут вести себя удивительно аналогично, когда данные таблицы значительно меньше, чем системная RAM.
Глобальные временные таблицы будут другим вариантом, но не поддерживаются в PostgreSQL с 9.2 (см. комментарии).
Ответ 2
Отвечая на четырехлетний вопрос, но так как он попадает на результаты поиска google даже сейчас.
Нет встроенного способа кэширования полной таблицы в памяти, но есть расширение, которое может это сделать.
В хранилище столбцов памяти - это библиотека, которая действует как сокращение в расширении, а также как механизм хранения столбцов и выполнения. Вы можете ссылаться здесь для документации. Существует функция загрузки, которую вы можете использовать для загрузки всей таблицы в память.
Преимущество заключается в том, что таблица хранится внутри postgres shared_buffers, поэтому при выполнении запроса postgres сразу же обнаруживает, что страницы находятся в памяти и извлекаются оттуда.
Недостатком является то, что shared_buffers на самом деле не предназначен для работы таким образом, и могут возникнуть нестабильности (обычно это не так), но вы, вероятно, можете иметь это во вторичном кластере/машине с этой конфигурацией, чтобы быть в безопасности.
Все остальные обычные оговорки о postgres и shared_buffers по-прежнему применяются.