2013-09-25 11 views
5

Ho letto molti thread sulla nuova impostazione predefinita WAL nello stack di dati SQLite/Core ios7.il database ios7 sqlite con WAL non sincronizza mai il file di database principale

Sembrava una buona idea in primo luogo ... Anche se ho bisogno di eseguire una copia del database su un webservice distante di volta in volta in base alle mie esigenze aziendali. Al momento eseguo solo il backup del file SQLITE e non riesco ad aggiungere altri 2 file all'operazione webservice che sto utilizzando. Ciò significa che il mio backup non è chiaramente aggiornato quindi piuttosto inutile.

Altre persone suggeriscono che dovrei disabilitare WAL utilizzando journal_mode = DELETE (NSSQLitePragmasOption) che è, per me, una soluzione accettabile. Tuttavia, non mi sento a mio agio con questo. Mi sento come se mi stavo perdendo un bump di prestazioni abbastanza decente.

Idealmente mi piacerebbe poter dire a Core Data/SQLite di sincronizzare SHM/WAL con il file di dati principale e quindi eseguire il backup. C'è un modo per farlo senza dover scavare pazze API private o non documentate?

+0

hai qualche soluzione? –

+0

Ho lo stesso problema. Sto passando da iOS 6 a iOS 7, iOS6 sembra avere solo file .sqlite per memorizzare i dati. Ma iOS7 ha file .shm e .wal. Io uso fileWrapper per salvare i file in un singolo file. Se in iOS7 non disattivo * .shm e * .wal, quindi iOS6 non può utilizzare il file di backup in iOS7 – JimZ

+0

Sono andato per l'opzione facile (la precedente modalità predefinita). Non ho trovato una buona soluzione. –

risposta

2

A move the WAL data to the database file, aprire il file di database ed eseguire l'istruzione SQL PRAGMA wal_checkpoint(RESTART).

+0

Potete fornire un esempio per favore? Sembra che abbia bisogno anche del database? Puoi ottenerlo da un managedContext o qualcosa del genere? –

+3

Non è mai una buona idea parlare direttamente con SQLite quando si utilizza Core Data. Dovresti usare i metodi Objective C per questo, a tuo vantaggio. –

2
$ sqlite3 yourFile.sqlite 
SQLite version 3.7.12 2012-04-03 19:43:07 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> PRAGMA wal_checkpoint(RESTART); 
0|20|20 
sqlite> .exit 
$ 
Problemi correlati