Таблица в памяти в PostgreSQL

Как я могу создать таблицу в памяти в PostgreSQL?


person PHPst    schedule 16.10.2011    source источник


Ответы (3)


Создайте RAM-диск с помощью программного обеспечения, подходящего для вашей ОС. Используйте CREATE TABLESPACE для создания кластера БД на RAM-диске. Когда вы создаете свою таблицу, используйте предложение TABLESPACE. Очевидно, что ваши RAM-таблицы не сохранятся при перезагрузке системы, если вы не сохраните RAM-диск.

person Andrew Lazarus    schedule 20.10.2011
comment
Согласно 2ndquadrant.com/en/blog/postgresql-no -tablespaces-on-ramdisks это опасная вещь, так как это может помешать восстановлению других табличных пространств, так как воспроизведение журнала упреждающей записи может завершиться ошибкой!!! - person Sebastien; 18.09.2019
comment
О, это опасно. Интересно, безопаснее ли использовать файл с отображением памяти, если в ОС это поддерживается. - person Andrew Lazarus; 18.09.2019
comment
Может быть, объединение табличного пространства виртуального диска с незарегистрированной таблицей позволит избежать проблемы, поскольку теоретически WAL не должен содержать ничего для этой таблицы, чтобы воспроизведение не могло завершиться ошибкой? - person Sebastien; 20.09.2019

Ну, технически это не таблица в памяти, но вы можете создать глобальную временную таблицу:

create global temporary table foo (a char(1));

Не гарантируется, что он останется в памяти все время, но, вероятно, будет (если это не огромная таблица).

Вы также можете рассмотреть незарегистрированные таблицы PostgreSQL 9.1, которые дадут вам лучшую производительность за счет невозможности участвовать в транзакциях (их операции записи не поддерживаются в WAL).

person Pablo Santa Cruz    schedule 16.10.2011
comment
Большое спасибо за быстрый ответ. - person PHPst; 16.10.2011
comment
За исключением того, что global — это просто шум в PostgreSQL. Возможно, полезно для совместимости с другими СУБД. Я цитирую руководство: Optionally, GLOBAL or LOCAL can be written before TEMPORARY or TEMP. This makes no difference in PostgreSQL, ... - person Erwin Brandstetter; 16.10.2011
comment
Знаете ли вы, есть ли параметр для временных таблиц, чтобы ограничить их объем, занимаемый памятью? - person tothphu; 29.06.2012

Вы также можете рассмотреть незарегистрированные таблицы PostgreSQL 9.1, которые дадут вам лучшую производительность за счет невозможности участвовать в транзакциях (их операции записи не поддерживаются в WAL).

от @PabloSantaCruz

образец из https://www.compose.com/articles/faster-performance-with-unlogged-tables-in-postgresql/

CREATE UNLOGGED TABLE "EUR/USD_ticks"  
(
  dt timestamp without time zone NOT NULL,
  bid numeric NOT NULL,
  ask numeric NOT NULL,
  bid_vol numeric,
  ask_vol numeric,
  CONSTRAINT "EUR/USD_ticks_pkey" PRIMARY KEY (dt)
)

Я планирую попробовать это и подумал, что это заслуживает отдельного ответа для пользователей, чтобы проголосовать за этот вариант (то есть «длинный хвост»).

person yzorg    schedule 19.07.2018
comment
@PabloSantaCruz Если вы разветвите свой ответ, чтобы мы могли проголосовать за UNLOGGED, я был бы рад удалить этот повторяющийся ответ. - person yzorg; 19.07.2018