On Tue, Apr 14, 2015 at 9:37 AM, Jim Callahan
<jim.callahan.orlando at gmail.com> wrote:
> My recollection is that SQLite has a "temp" or "tmp" namespace available
> for intermediate tables -- it was on my todo list, but I never got around
> to exploring that option.

CREATE TEMP TABLE ... works very well for things like this.  If you
use a distinct table name you can just refer to it directly, or you
can say temp.tablename (vs main.tablename).

You can also create temp databases, where SQLite arranges for the
underlying file to go away on close (POSIX deletes after opening,
Windows uses DELETE-ON-CLOSE flags).  I believe you pass NULL at the
filename to sqlite3_open().  I haven't tried out whether you can also
do "ATTACH NULL AS mydb", but I'd bet you can.

The main advantage of temporary tables over a :memory: database is
that you don't have to worry about blowing out memory, because it can
spill to disk easily.  There's no journal (because temporary), so it
should be faster than a staging table in your database.  SQLite also
optimizes things if your temp tables can be handled entirely in the
cache, they'll never hit disk (and even if they hit an OS write, I
don't think they're ever sync'ed so the OS might never write things to
disk).

The main dis-advantage is that you can't checkpoint things.  If you
crash or shutdown, when you start back up the data is gone and you
have to start over.

-scott

Reply via email to