Elephant is a LLGPLed portable object database based on Sleepycat (Berkeley DB) or relational databases. Here is the Elephant home page.

As of Dec. 5, 2005, Elephant has been tested with BerkeleyDB, SQLite3, and Postgres, and allows seamless migration of data between those repositories. For a while it did not work with Unicode enabled SBCL versions, but that has now been fixed.

This comparison by an Elephant developer contrasts it with today's early versions of Rucksack.

Things to keep in mind

If you want to modify the value in a slot which doesn't hold a persistent object, just set the whole slot. Because otherwise the updated slot won't be stored in the DB. Here's an example:

;; Wrong -- the DB won't update
(setf (first (slot1 my-persistent-object))

;; Ok
(setf (slot1 my-persistent-object) 
      (cons 'foo (rest (slot1 my-persistent-object))))