Как я могу сделать резервную копию хранилища CoreData (SQLite) без его поисковых индексов простым способом?

Текущее решение и проблема с ним: я в настоящее время zip мой каталог пользователя при создании резервной копии моей базы данных SQLite, созданной CoreData. Тем не менее, это поддерживает резервные индексы (которые делают поиск быстрее). (В моем случае было много избыточности, переместившись в CoreData с несколькими индексами поиска. Объем данных увеличился с примерно 3 МБ до более 10 МБ).

Я хочу: я хотел бы сделать резервную копию базы данных SQLite, созданной CoreData, эффективным с точки зрения хранения, т. Е. Без избыточных поисковых индексов. При восстановлении резервной копии эти поисковые индексы должны быть воссозданы. Весь процесс резервного копирования и восстановления должен быть максимально простым, т. Е. Без ручного создания клона структуры данных без поисковых индексов.

Что я пробовал: я прочитал много сообщений о Stackoverflow о резервном копировании CoreData, а также документации Apple. Например: migratePersistentStore . Кроме того, я прочитал документацию по SQLite, например, SQLite Online Backup API . Однако я не нашел возможности создать резервную копию без индексов поиска и восстановить эту резервную копию таким образом, чтобы индексы поиска были перестроены.

Мои настройки / параметры:

  • ОС: iOS 8.2

  • Устройство: iPhone 6 Plus

  • @{ NSMigratePersistentStoresAutomaticallyOption : @YES, NSInferMappingModelAutomaticallyOption : @YES, NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"} }; магазина: @{ NSMigratePersistentStoresAutomaticallyOption : @YES, NSInferMappingModelAutomaticallyOption : @YES, NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"} };

  • Опция MOC: NSMainQueueConcurrencyType

Хотя вы все еще можете переосмыслить свою стратегию резервного копирования в целом, одна вещь, на которую вы могли бы обратить внимание, – это подключение к файлам .sqlite, являющимся основным хранилищем данных, непосредственно с использованием Sqlite API и просто экспорт данных в резервный файл .sqlite на диск. Это очень похоже на то, для чего может использоваться команда sqlite .dump.

Ранее было предложено нечто подобное: https://stackoverflow.com/a/27453637

Соответствующие API-интерфейсы SQLite для поиска можно найти здесь: https://www.sqlite.org/c3ref/backup_finish.html