Frequently Asked Questions
Table of contents
- How can I enable encryption for a non-default SQLite VFS?
- How can I change the page size of an encrypted database?
How can I enable encryption for a non-default SQLite VFS?
On initialization of the SQLite library encryption is automatically enabled for the default VFS by registering a new VFS combining the SQLite3 Multiple Ciphers VFS shim with SQLite’s default VFS for the current platform (for example, on Windows this would result in the (new) VFS multipleciphers-win32
) and making it the new default VFS.
On most platforms SQLite offers additional VFS implementations. For example, on Windows there is the VFS win32-longpath
which supports very long file path specifications for database files, while the default VFS win32
supports only file paths of at most 1040 characters.
A non-default VFS is chosen for a SQLite database connection by specifying the name of the requested VFS on opening the database connection. Encryption support can be enabled for such a non-default VFS by simply prefixing the VFS name with the string multipleciphers-
. For example, for using the VFS win32-longpath
with encryption support specify the VFS name multipleciphers-win32-longpath
. SQLite3 Multiple Ciphers will create and register this new VFS automatically. However, the new VFS will not be made the default.
How can I change the page size of an encrypted database?
Usually SQLite allows to change the page size of a database by requesting the new page size via a PRAGMA page_size
SQL statement and actually changing the page size when a VACUUM
statement is executed.
Unfortunately, this method does not work for encrypted databases. If you need to change the page size of an encrypted database, apply the following procedure:
-- Decrypt database
PRAGMA rekey='';
-- Set requested page size
PRAGMA page_size=32768;
-- Vacuun database
VACUUM;
-- Encrypt database again
PRAGMA rekey='passphrase';
An alternative would be to create a copy of the database with the new page size:
PRAGMA page_size=32768;
VACUUM INTO 'file:databasefile?key=passphrase'
Important
The database must not be in WAL journal mode.