Postfix SQLite Howto

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

Introduction

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
virtual(5) table, one for an access(5) table, and one for an aliases(5) table
if you want.

Building Postfix with SQLite support

The Postfix SQLite client utilizes the sqlite3 library, which can be obtained
from:

    https://www.sqlite.org/

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:

    make -f Makefile.init makefiles \
         "CCARGS=-DHAS_SQLITE -I/usr/local/include" \
         "AUXLIBS_SQLITE=-L/usr/local/lib -lsqlite3 -lpthread"

If your SQLite shared library is in a directory that the RUN-TIME linker does
not know about, add a "-Wl,-R,/path/to/directory" option after "-lsqlite3".

Postfix versions before 3.0 use AUXLIBS instead of AUXLIBS_SQLITE. With Postfix
3.0 and later, the old AUXLIBS variable still supports building a statically-
loaded SQLite database client, but only the new AUXLIBS_SQLITE variable
supports building a dynamically-loaded or statically-loaded SQLite database
client.

    Failure to use the AUXLIBS_SQLITE 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.

Then, just run 'make'.

Using SQLite tables

Once Postfix is built with sqlite support, you can specify a map type in
main.cf like this:

    alias_maps = sqlite:/etc/postfix/sqlite-aliases.cf

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 sqlite_table(5) manual page.

Example: local aliases

#
# sqlite config file for local(8) aliases(5) lookups
#

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

# See sqlite_table(5) for details.
query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid'

Credits

SQLite support was added with Postfix version 2.8.

  * Implementation by Axel Steiner
  * Documentation by Jesus Garcia Crespo

