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

Как мога да създам таблица в паметта в PostgreSQL?


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


Отговори (3)


Създайте RAM диск с помощта на софтуер, подходящ за вашата операционна система. Използвайте CREATE TABLESPACE за създаване на DB клъстер на RAM диска. Когато създавате вашата таблица, използвайте клаузата TABLESPACE. Очевидно вашите RAM таблици няма да се запазят при рестартиране на системата, освен ако не запазите RAM диска.

person Andrew Lazarus    schedule 20.10.2011
comment
Според 2ndquadrant.com/en/blog/postgresql-no -tablespaces-on-ramdisks това е опасно нещо, тъй като може да попречи на възстановяването на други таблични пространства, тъй като възпроизвеждането на Write Ahead Log може да се провали!!! - person Sebastien; 18.09.2019
comment
О, опасно е. Чудя се дали е по-безопасно да използвам файл с карта на паметта, ако е на операционна система, където това се поддържа. - person Andrew Lazarus; 18.09.2019
comment
Може би комбинирането на таблично пространство на ramdisk с нерегистрирана таблица ще избегне проблема, тъй като на теория 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
Освен че глобалното е просто шум в PostgreSQL. Вероятно полезно за съвместимост с други RDBMS. Аз цитирам ръководството: 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