Записать базу данных sqlite3 в память в файл, используя clsql

Как показывает вопрос. Я создал базу данных в памяти, используя ":memory:" а также clsql:with-database повысить производительность записи / вставки-запроса. Но в конце я хочу иметь постоянную копию заполненной базы данных на моем жестком диске.

Это должно выглядеть примерно так:

(clsql:with-database (db (":memory:") :database-type :sqlite3)
  ;;entering db-scheme
  ;;entering a bunch of data
  (magically-write-database-to-file db file-path))

Как мне этого добиться?

2 ответа

Решение

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

(execute-command "PRAGMA journal_mode = OFF")
(execute-command "PRAGMA synchronous = OFF")

Я думаю, что вам просто нужно создать таблицы с create-view-from-classзатем позвоните update-records-from-instance на ваших объектах.

Однако я не уверен, имеет ли смысл сначала создание явной базы данных в памяти. Вы можете сначала создать коллекцию объектов, а затем поместить их в базу данных с помощью update-records-from-instance на одном дыхании. "Классы просмотра" CLSQL - это на самом деле обычные классы с некоторой информацией о том, как их сохранять / загружать. Когда вы просто меняете объекты без сохранения, волшебства не происходит.

Другие вопросы по тегам