Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Postfix SQLite Howto</title>

<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">

</head>

<body>

<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix SQLite Howto</h1>

<hr>

<h2>Introduction</h2>

<p> The Postfix sqlite map type allows you to hook up Postfix to a
SQLite database. This implementation allows for multiple sqlite
databases: you can use one for a <a href="virtual.5.html">virtual(5)</a> table, one for an
<a href="access.5.html">access(5)</a> table, and one for an <a href="aliases.5.html">aliases(5)</a> table if you want.  </p>

<h2>Building Postfix with SQLite support</h2>

<p> The Postfix SQLite client utilizes the sqlite3 library,
which can be obtained from: </p>

<blockquote>
    <p> <a href="http://www.sqlite.org/">http://www.sqlite.org/</a> </p>
</blockquote>

<p> In order to build Postfix with sqlite map support, you will
need to add to CCARGS the flags -DHAS_SQLITE and -I with the directory
containing the sqlite header files, and you will need to add to
AUXLIBS the directory and name of the sqlite3 library, plus the
name of the standard POSIX thread library (pthread).  For example:
</p>

<blockquote>
<pre>
make -f Makefile.init makefiles \
     'CCARGS=-DHAS_SQLITE -I/usr/local/include' \
     '<a href="SQLITE_README.html">AUXLIBS_SQLITE</a>=-L/usr/local/lib -lsqlite3 -lpthread'
</pre>
</blockquote>

<p> Postfix versions before 3.0 use AUXLIBS instead of <a href="SQLITE_README.html">AUXLIBS_SQLITE</a>.
With Postfix 3.0 and later, the old AUXLIBS variable still supports
building a statically-loaded SQLite database client, but only the new
<a href="SQLITE_README.html">AUXLIBS_SQLITE</a> variable supports building a dynamically-loaded or 
statically-loaded SQLite database client.  </p>

<blockquote>
 
<p> Failure to use the <a href="SQLITE_README.html">AUXLIBS_SQLITE</a> variable will defeat the purpose
of dynamic database client loading. Every Postfix executable file
will have SQLITE database library dependencies. And that was exactly
what dynamic database client loading was meant to avoid. </p>
 
</blockquote>

<p> Then, just run 'make'.</p>

<h2>Using SQLite tables</h2>

<p> Once Postfix is built with sqlite support, you can specify a
map type in <a href="postconf.5.html">main.cf</a> like this: </p>

<blockquote>
<pre>
<a href="postconf.5.html#alias_maps">alias_maps</a> = <a href="sqlite_table.5.html">sqlite</a>:/etc/postfix/sqlite-aliases.cf
</pre>
</blockquote>

<p> The file /etc/postfix/sqlite-aliases.cf specifies lots of
information telling Postfix how to reference the sqlite database.
For a complete description, see the <a href="sqlite_table.5.html">sqlite_table(5)</a> manual page. </p>

<h2>Example: local aliases </h2>

<pre>
#
# sqlite config file for <a href="local.8.html">local(8)</a> <a href="aliases.5.html">aliases(5)</a> lookups
#

# Path to database 
dbpath = /some/path/to/sqlite_database

# See <a href="sqlite_table.5.html">sqlite_table(5)</a> for details.
query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid'
</pre>

<h2>Additional notes</h2>

<p> The SQLite configuration interface setup allows for multiple
sqlite databases: you can use one for a virtual table, one for an
access table, and one for an aliases table if you want. </p>

<h2>Credits</h2>

<p> SQLite support was added with Postfix version 2.8. </p>

<ul>

<li>Implementation by Axel Steiner</li>
<li>Documentation by Jesus Garcia Crespo</li>

</ul>

</body>

</html>