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 PostgreSQL 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 PostgreSQL Howto</h1> 17 18<hr> 19 20<h2>Introduction</h2> 21 22<p> The Postfix pgsql map type allows you to hook up Postfix to a 23PostgreSQL database. This implementation allows for multiple pgsql 24databases: you can use one for a virtual(5) table, one for an 25access(5) table, and one for an aliases(5) table if you want. You 26can specify multiple servers for the same database, so that Postfix 27can switch to a good database server if one goes bad. </p> 28 29<p> Busy mail servers using pgsql maps will generate lots of 30concurrent pgsql clients, so the pgsql server(s) should be run with 31this fact in mind. You can reduce the number of concurrent pgsql 32clients by using the Postfix proxymap(8) service. </p> 33 34<h2>Building Postfix with PostgreSQL support</h2> 35 36<p> These instructions assume that you build Postfix from source 37code as described in the INSTALL document. Some modification may 38be required if you build Postfix from a vendor-specific source 39package. </p> 40 41<p> Note: to use pgsql with Debian GNU/Linux's Postfix, all you 42need to do is to install the postfix-pgsql package and you're done. 43There is no need to recompile Postfix. </p> 44 45<p> In order to build Postfix with pgsql map support, you specify 46-DHAS_PGSQL, the directory with the PostgreSQL header files, and 47the location of the libpq library file. </p> 48 49<p> For example: </p> 50 51<blockquote> 52<pre> 53% make tidy 54% make -f Makefile.init makefiles \ 55 'CCARGS=-DHAS_PGSQL -I/usr/local/include/pgsql' \ 56 'AUXLIBS_PGSQL=-L/usr/local/lib -lpq' 57</pre> 58</blockquote> 59 60<p> Postfix versions before 3.0 use AUXLIBS instead of AUXLIBS_PGSQL. 61With Postfix 3.0 and later, the old AUXLIBS variable still supports 62building a statically-loaded PostgreSQL database client, but only 63the new AUXLIBS_PGSQL variable supports building a dynamically-loaded 64or statically-loaded PostgreSQL database client. </p> 65 66<blockquote> 67 68<p> Failure to use the AUXLIBS_PGSQL variable will defeat the purpose 69of dynamic database client loading. Every Postfix executable file 70will have PGSQL database library dependencies. And that was exactly 71what dynamic database client loading was meant to avoid. </p> 72 73</blockquote> 74 75<p> Then just run 'make'. </p> 76 77<h2>Configuring PostgreSQL lookup tables</h2> 78 79<p> Once Postfix is built with pgsql support, you can specify a 80map type in main.cf like this: </p> 81 82<blockquote> 83<pre> 84/etc/postfix/main.cf: 85 alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf 86</pre> 87</blockquote> 88 89<p> The file /etc/postfix/pgsql-aliases.cf specifies lots of 90information telling postfix how to reference the pgsql database. 91For a complete description, see the pgsql_table(5) manual page. </p> 92 93<h2>Example: local aliases </h2> 94 95<pre> 96# 97# pgsql config file for local(8) aliases(5) lookups 98# 99 100# 101# The hosts that Postfix will try to connect to 102hosts = host1.some.domain host2.some.domain 103 104# The user name and password to log into the pgsql server. 105user = someone 106password = some_password 107 108# The database name on the servers. 109dbname = customer_database 110 111# Postfix 2.2 and later The SQL query template. See pgsql_table(5). 112query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid' 113 114# For Postfix releases prior to 2.2. See pgsql_table(5) for details. 115select_field = forw_addr 116table = mxaliases 117where_field = alias 118# Don't forget the leading "AND"! 119additional_conditions = AND status = 'paid' 120</pre> 121 122<h2>Using mirrored databases</h2> 123 124<p> Sites that have a need for multiple mail exchangers may enjoy 125the convenience of using a networked mailer database, but do not 126want to introduce a single point of failure to their system. </p> 127 128<p> For this reason we've included the ability to have Postfix 129reference multiple hosts for access to a single pgsql map. This 130will work if sites set up mirrored pgsql databases on two or more 131hosts. </p> 132 133<p> Whenever queries fail with an error at one host, the rest of 134the hosts will be tried in random order. If no pgsql server hosts 135are reachable, then mail will be deferred until at least one of 136those hosts is reachable. </p> 137 138<h2>Credits</h2> 139 140<ul> 141 142<li> This code is based upon the Postfix mysql map by Scott Cotton 143and Joshua Marcus, IC Group, Inc.</li> 144 145<li> The PostgreSQL changes were done by Aaron Sethman.</li> 146 147<li> Updates for Postfix 1.1.x and PostgreSQL 7.1+ and support for 148calling stored procedures were added by Philip Warner.</li> 149 150<li> LaMont Jones was the initial Postfix pgsql maintainer.</li> 151 152<li> Liviu Daia revised the configuration interface and added the 153main.cf configuration feature.</li> 154 155<li> Liviu Daia revised the configuration interface and added the main.cf 156configuration feature.</li> 157 158<li> Liviu Daia with further refinements from Jose Luis Tallon and 159Victor Duchovni developed the common query, result_format, domain and 160expansion_limit interface for LDAP, MySQL and PosgreSQL.</li> 161 162<li> Leandro Santi updated the PostgreSQL client after the PostgreSQL 163developers made major database API changes in response to SQL 164injection problems, and made PQexec() handling more robust. </li> 165 166</ul> 167 168</body> 169 170</html> 171