Z włączoną WAL (Write-Ahead-Logging) włączoną w SQLite 3.7 (która jest domyślna dla Core Data na iOS 7), jak scalić/zatwierdzić zawartość z pliku -wal z powrotem w główny plik bazy danych?Jak scalić zawartość pliku SQLite 3.7 WAL do głównego pliku bazy danych
Odpowiedz
Wykonaj checkpoint, tj. Wykonaj PRAGMA wal_checkpoint.
Z linii poleceń, wykonaj następujące czynności:
sqlite3 MyDatabase.sqlite
VACUUM;
- CTRL-D, aby zamknąć konsolę SQLite.
Gotowe!
Plik -wal powinien teraz mieć rozmiar 0 i wszystko powinno znajdować się w głównym pliku bazy danych.
W tym wątku proponowane są dwa rozwiązania: (1) PRAGMA wal_checkpoint (2) VACUUM i zakończ. Ja też pracuję z Core Data. Mój główny plik sqlite miał 46 MB, a mój plik -0wal = 1,2 GB. Moje wyniki: PRAGMA wal_checkpoint lub PRAGMA wal_checkpoint (1) nie mają żadnego efektu. VACUUM zmniejszyło rozmiar pliku -wal z 1,2 GB do 40,8 MB i zmniejszyło główny sqlite z 46 do 40,5 MB. Wielokrotne wykonanie każdej z komend nie spowodowało dalszych redukcji. Jednak zamknięcie konsoli sqlite3 zmniejszyło plik -wal do 0, jak stwierdził Johannes. –
@JerryKrinock Hej Jerry, miło cię słyszeć. To naprawdę interesujące! Możesz zapytać o to ludzi na liście mailingowej sqlite i zaktualizuj swój komentarz, gdy dowiesz się, dlaczego tak się dzieje. –
Przy uruchomieniu terminala 'sqlite3 db.sqlite' upewnij się, że katalog zawiera plik' -wal', a następnie uruchom 'PRAGMA wal_checkpoint' i opuść bazę danych za pomocą' ctrl + d' –