Doing so is easy. You just dump out of SQLITE2, and import into SQLITE3, such as:
sqlite2 mysqlite2db.db .dump > sqlite2_mysqlite2db.dump
sqlite3 mysqlite3db.db < sqlite2_mysqlite2db.dump
One problem is though, SQLITE2 is often not available anymore through any of the standard Unix package management systems. So if you have a newer machine with an app that's utilizing a SQLITE2 database and you want to upgrade that app to a newer version that uses SQLITE3, it's tough to get SQLITE2 installed so you can do the conversion.
What I did is download the SQLITE2 source code from:
http://www.sqlite.org/sqlite-source-2_8_17.zip
Then I compiled. (Remove the tclsqlite.c file. It's not needed)
This is on Debian Linux, BTW.
gcc -o sqlite2 *.c
That worked and got me a sqlite2 executable. However, when I tried to use it on my SQLITE2 database, I got:
sqlite2: btree.c:702: sqliteBtreeOpen: Assertion `sizeof(ptr)==sizeof(char*)' failed.
Hmm...what the heck?
I didn't carefully read the error and instead quickly went to googling. However, I didn't find much in the way of help. However, it quickly struck me that this was a 64-bit problem. Aha! I had forgotten to compile the program with the 32-bit flag. No problem.
(On OSX the flag would be -arch i386)
gcc -m32 -o sqlite2 *.c
But that gave me:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
After a little googling on that, I discovered I needed to install the lib6c-dev-i386 package, since I was running on an AMD 64-bit system. I installed the package, recompiled and everything is working fine.
No comments:
Post a Comment