--- /dev/null
+-- SQL commands for cleaning out the local database. These commands should be
+-- executed within a transaction, but this script does not do so
+-- automatically--it is up to the caller to set up a transaction before
+-- executing these commands.
+--
+-- Any snapshots which do not need to be tracked should be deleted from the
+-- snapshots table prior to executing these commands. This script will then
+-- clean up all state with a snapshotid not found in the snapshots table.
+
+-- Delete entries in the snapshot_contents table which are for non-existent
+-- snapshots.
+delete from snapshot_contents
+ where snapshotid not in (select snapshotid from snapshots);
+
+-- Find segments which contain no objects used by any current snapshots, and
+-- delete them from the segment table.
+delete from segments where segmentid not in
+ (select distinct segmentid from snapshot_contents natural join block_index);
+
+-- Finally, delete objects contained in non-existent segments. We can't simply
+-- delete unused objects, since we use the set of unused objects to determine
+-- the used/free ratio of segments.
+delete from block_index
+ where segmentid not in (select segmentid from segments);