Create an SQL script for cleaning out the local object database.
authorMichael Vrable <mvrable@cs.ucsd.edu>
Mon, 4 Jun 2007 17:29:17 +0000 (10:29 -0700)
committerMichael Vrable <mvrable@turin.ucsd.edu>
Mon, 4 Jun 2007 17:29:17 +0000 (10:29 -0700)
cleandb.sql [new file with mode: 0644]

diff --git a/cleandb.sql b/cleandb.sql
new file mode 100644 (file)
index 0000000..d744d97
--- /dev/null
@@ -0,0 +1,24 @@
+-- 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);