*** DRAFT ***

SQL As Understood By SQLite




R-14563-40327:[ ]

The VACUUM command rebuilds the database file, repacking it into a minimal amount of disk space. There are several reasons an application might do this:

R-55119-57913:[By default, VACUUM only works only on the main database. ] R-36598-60500:[Attached databases can be vacuumed by appending the appropriate schema-name to the VACUUM statement. ]

Compatibility Warning: The ability to vacuum attached databases was added in version 3.15.0 (2016-10-14). Prior to that, a schema-name added to the VACUUM statement would be silently ignored and the "main" schema would be vacuumed.

R-27809-56550:[The VACUUM command works by copying the contents of the database into a temporary database file and then overwriting the original with the contents of the temporary file. ] R-48974-49065:[When overwriting the original, a rollback journal or write-ahead log WAL file is used just as it would be for any other database transaction. ] R-13903-46567:[This means that when VACUUMing a database, as much as twice the size of the original database file is required in free disk space. ]

R-17495-17419:[The VACUUM command may change the ROWIDs of entries in any tables that do not have an explicit INTEGER PRIMARY KEY. ]

R-49563-33883:[A VACUUM will fail if there is an open transaction, or if there are one or more active SQL statements when it is run. ]

R-55138-13241:[An alternative to using the VACUUM command to reclaim space after data has been deleted is auto-vacuum mode, enabled using the auto_vacuum pragma. ] R-64844-34873:[When auto_vacuum is enabled for a database free pages may be reclaimed after deleting data, causing the file to shrink, without rebuilding the entire database using VACUUM. ] R-41548-42669:[However, using auto_vacuum can lead to extra database file fragmentation. ] R-49389-26640:[And auto_vacuum does not compact partially filled pages of the database as VACUUM does. ]

*** DRAFT ***