Postfix CDB Howto

-------------------------------------------------------------------------------

Introduction

CDB (Constant DataBase) is an indexed file format designed by Daniel Bernstein.
CDB is optimized exclusively for read access and guarantees that each record
will be read in at most two disk accesses. This is achieved by forgoing support
for incremental updates: no single-record inserts or deletes are supported. CDB
databases can be modified only by rebuilding them completely from scratch,
hence the "constant" qualifier in the name.

Postfix CDB databases are specified as "cdb:name", where name specifies the CDB
file name without the ".cdb" suffix (another suffix, ".tmp", is used
temporarily while a CDB file is under construction). CDB databases are
maintained with the postmap(1) or postalias(1) command. The DATABASE_README
document has general information about Postfix databases.

CDB support is available with Postfix 2.2 and later releases. This document
describes how to build Postfix with CDB support.

Building Postfix with CDB

Postfix is compatible with two CDB implementations:

  * The original cdb library from Daniel Bernstein, available from http://
    cr.yp.to/cdb.html, and

  * tinycdb (version 0.5 and later) from Michael Tokarev, available from http:/
    /www.corpit.ru/mjt/tinycdb.html.

Tinycdb is preferred, since it is a bit faster, has additional useful
functionality and is much simpler to use.

To build Postfix after you have installed tinycdb, use something like:

    % make tidy
    % CDB=../../../tinycdb-0.5
    % make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
        "AUXLIBS=$CDB/libcdb.a"
    % make

Alternatively, for the D.J.B. version of CDB:

    % make tidy
    % CDB=../../../cdb-0.75
    % make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
        "AUXLIBS=$CDB/cdb.a $CDB/alloc.a $CDB/buffer.a $CDB/unix.a $CDB/byte.a"
    % make

After postfix has been built with cdb support, you can use "cdb" tables
wherever you can use read-only "hash", "btree" or "dbm" tables. However, the
"postmap -i" (incremental record insertion) and "postmap -d" (incremental
record deletion) command-line options are not available. For the same reason
the "cdb" map type cannot be used to store the persistent address verification
cache for the verify(8) service.

