xref: /netbsd-src/external/ibm-public/postfix/dist/proto/CDB_README.html (revision 7330f729ccf0bd976a06f95fad452fe774fc7fd1)
1<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
2        "http://www.w3.org/TR/html4/loose.dtd">
3
4<html>
5
6<head>
7
8<title>Postfix CDB Howto</title>
9
10<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
11
12</head>
13
14<body>
15
16<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix CDB Howto</h1>
17
18<hr>
19
20<h2>Introduction</h2>
21
22<p> CDB (Constant DataBase) is an indexed file format designed by
23Daniel Bernstein. CDB is optimized exclusively for read access
24and guarantees that each record will be read in at most two disk
25accesses. This is achieved by forgoing support for incremental
26updates: no single-record inserts or deletes are supported.  CDB
27databases can be modified only by rebuilding them completely from
28scratch, hence the "constant" qualifier in the name.  </p>
29
30<p> Postfix CDB databases are specified as "cdb:<i>name</i>", where
31<i>name</i> specifies the CDB file name without the ".cdb" suffix
32(another suffix, ".tmp", is used temporarily while a CDB file is
33under construction).  CDB databases are maintained with the postmap(1)
34or postalias(1) command. The DATABASE_README document has general
35information about Postfix databases.  </p>
36
37<p> CDB support is available with Postfix 2.2 and later releases.
38This document describes how to build Postfix with CDB support. </p>
39
40<h2>Building Postfix with CDB support</h2>
41
42<p> These instructions assume that you build Postfix from source
43code as described in the INSTALL document. Some modification may
44be required if you build Postfix from a vendor-specific source
45package.  </p>
46
47<p> Postfix is compatible with two CDB implementations: </p>
48
49<ul>
50
51<li> <p> The original cdb library from Daniel Bernstein, available
52from http://cr.yp.to/cdb.html, and </p>
53
54<li> <p> tinycdb (version 0.5 and later) from Michael Tokarev,
55available from http://www.corpit.ru/mjt/tinycdb.html. </p>
56
57</ul>
58
59<p>  Tinycdb is preferred, since it is a bit faster, has additional
60useful functionality and is much simpler to use. </p>
61
62<p>To build Postfix after you have installed tinycdb, use something
63like: </p>
64
65<blockquote>
66<pre>
67% make tidy
68% CDB=../../../tinycdb-0.5
69% make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
70    "AUXLIBS_CDB=$CDB/libcdb.a"
71% make
72</pre>
73</blockquote>
74
75<p> Alternatively, for the D.J.B. version of CDB:<p>
76
77<blockquote>
78<pre>
79% make tidy
80% CDB=../../../cdb-0.75
81% make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
82    "AUXLIBS_CDB=$CDB/cdb.a $CDB/alloc.a $CDB/buffer.a $CDB/unix.a $CDB/byte.a"
83% make
84</pre>
85</blockquote>
86
87<p> Postfix versions before 3.0 use AUXLIBS instead of AUXLIBS_CDB.
88With Postfix 3.0 and later, the old AUXLIBS variable still supports
89building a statically-loaded CDB database client, but only the new
90AUXLIBS_CDB variable supports building a dynamically-loaded or
91statically-loaded CDB database client.  </p>
92
93<blockquote>
94
95<p> Failure to use the AUXLIBS_CDB variable will defeat the purpose
96of dynamic database client loading. Every Postfix executable file
97will have CDB database library dependencies. And that was exactly
98what dynamic database client loading was meant to avoid. </p>
99
100</blockquote>
101
102<p> After Postfix has been built with cdb support, you can use
103"cdb" tables wherever you can use read-only "hash", "btree" or
104"dbm" tables. However, the "<b>postmap -i</b>" (incremental record
105insertion) and "<b>postmap -d</b>" (incremental record deletion)
106command-line options are not available. For the same reason the
107"cdb" map type cannot be used to store the persistent address
108verification cache for the verify(8) service, or to store
109TLS session information for the tlsmgr(8) service. </p>
110