Создание таблицы «в памяти»

Функция

Определение оператора создания таблицы «в памяти».

Примечание

По умолчанию СУБД ЛИНТЕР не предусматривает работу с таблицами «в памяти». Для поддержки этой функциональности необходимо:

  • сконфигурировать СУБД с помощью утилиты gendb (см. документ «СУБД ЛИНТЕР. Создание и конфигурирование базы данных», подпункт «Установка параметров конфигурирования», команды SET IN-MEMORY TABLES, SET IN-MEMORY COLUMNS, SET IN-MEMORY FILES);

  • при каждом запуске ядра СУБД ЛИНТЕР указывать ключ /INMEMPOOL=< размер >, где < размер > задает максимально допустимое количество страниц в пуле страниц ядра СУБД ЛИНТЕР, выделяемых для размещения таблиц «в памяти». Если этот ключ не задан, то использование таблиц «в памяти» запрещено.

  • в случае активной работы с таблицами «в памяти» рекомендуется увеличить размер памяти канала, выполнив команду

    ALTER DATABASE SET CHANNEL MEMORY LIMIT 1048576;
Спецификация
   
< определение таблицы «в памяти» >::=
CREATE [IF NOT EXISTS | OR REPLACE]
TABLE [имя схемы.]имя таблицы(атрибуты таблицы)
IN-MEMORY [[NO] AUTOSAVE] [[NO] AUTOLOAD]
Синтаксические правила
  1. Параметры (< атрибуты таблицы >) аналогичны параметрам создания базовой таблицы (см. конструкцию < создание таблицы >), за исключением атрибутов, информация о которых хранится не только в описании таблицы и ее столбцов, но и в других компонентах БД. Например: значения по умолчанию, диапазоны значений столбцов, правила ограничения целостности (CHECK), внешние ключи, фразовые индексы и т.п.

  2. Для таблиц «в памяти» запрещено создавать триггеры.

  3. Для таблиц «в памяти» запрещено использование ссылочной целостности.

  4. < Имя таблицы > должно быть отлично от имени любой другой таблицы (базовой или «в памяти»), представления и синонима в пределах < имени схемы > или текущей схемы.

    create table in_mem (i int unique) in-memory;
  5. Опция AUTOSAVE задаёт автоматическое сохранение таблицы «в памяти» на диск при завершении работы СУБД. Значение по умолчанию – NO AUTOSAVE.

  6. Опция AUTOLOAD задаёт автоматическое активизирование таблицы «в памяти» при старте СУБД ЛИНТЕР (в противном случае таблица «в памяти» активизируется при первом обращении к ней). Значение по умолчанию – NO AUTOLOAD. Обращение к таблице «в памяти», которая не была активизирована при старте СУБД или командой RESTORE (например, из-за недостаточности ресурсов) вызывает ошибку.

  7. Опция OR REPLACE заставляет удалять существующую в БД таблицу (со всеми её данными) и создавать её под тем же именем, но с указанными параметрами.

  8. Опция IF NOT EXISTS отменяет выполнение оператора, если указанная таблица уже существует в БД.

  9. Одновременное использование опций IF NOT EXISTS и OR REPLACE запрещено.

Общие правила
  1. При старте ядра СУБД выполняется активизация всех таблиц «в памяти», созданных с атрибутом AUTOLOAD.

  2. При останове ядра СУБД выполняется сохранение всех таблиц «в памяти», созданных с атрибутом AUTOSAVE.