xref: /netbsd-src/external/ibm-public/postfix/dist/html/PGSQL_README.html (revision b1c86f5f087524e68db12794ee9c3e3da1ab17a0)
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 <a href="virtual.5.html">virtual(5)</a> table, one for an
25<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.  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 <a href="proxymap.8.html">proxymap(8)</a> 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 <a href="INSTALL.html">INSTALL</a> 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=-L/usr/local/lib -lpq'
57</pre>
58</blockquote>
59
60<p> Then just run 'make'.  </p>
61
62<h2>Configuring PostgreSQL lookup tables</h2>
63
64<p> Once Postfix is built with pgsql support, you can specify a
65map type in <a href="postconf.5.html">main.cf</a> like this: </p>
66
67<blockquote>
68<pre>
69/etc/postfix/<a href="postconf.5.html">main.cf</a>:
70    <a href="postconf.5.html#alias_maps">alias_maps</a> = <a href="pgsql_table.5.html">pgsql</a>:/etc/postfix/pgsql-aliases.cf
71</pre>
72</blockquote>
73
74<p> The file /etc/postfix/pgsql-aliases.cf specifies lots of
75information telling postfix how to reference the pgsql database.
76For a complete description, see the <a href="pgsql_table.5.html">pgsql_table(5)</a> manual page. </p>
77
78<h2>Example: local aliases </h2>
79
80<pre>
81#
82# pgsql config file for <a href="local.8.html">local(8)</a> <a href="aliases.5.html">aliases(5)</a> lookups
83#
84
85#
86# The hosts that Postfix will try to connect to
87hosts = host1.some.domain host2.some.domain
88
89# The user name and password to log into the pgsql server.
90user = someone
91password = some_password
92
93# The database name on the servers.
94dbname = customer_database
95
96# Postfix 2.2 and later The SQL query template. See <a href="pgsql_table.5.html">pgsql_table(5)</a>.
97query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid'
98
99# For Postfix releases prior to 2.2. See <a href="pgsql_table.5.html">pgsql_table(5)</a> for details.
100select_field = forw_addr
101table = mxaliases
102where_field = alias
103# Don't forget the leading "AND"!
104additional_conditions = AND status = 'paid'
105</pre>
106
107<h2>Using mirrored databases</h2>
108
109<p> Sites that have a need for multiple mail exchangers may enjoy
110the convenience of using a networked mailer database, but do not
111want to introduce a single point of failure to their system.   </p>
112
113<p> For this reason we've included the ability to have Postfix
114reference multiple hosts for access to a single pgsql map.  This
115will work if sites set up mirrored pgsql databases on two or more
116hosts. </p>
117
118<p> Whenever queries fail with an error at one host, the rest of
119the hosts will be tried in random order.  If no pgsql server hosts
120are reachable, then mail will be deferred until at least one of
121those hosts is reachable. </p>
122
123<h2>Credits</h2>
124
125<ul>
126
127<li> This code is based upon the Postfix mysql map by Scott Cotton
128and Joshua Marcus, IC Group, Inc.</li>
129
130<li> The PostgreSQL changes were done by Aaron Sethman.</li>
131
132<li> Updates for Postfix 1.1.x and PostgreSQL 7.1+ and support for
133calling stored procedures were added by Philip Warner.</li>
134
135<li> LaMont Jones was the initial Postfix pgsql maintainer.</li>
136
137<li> Liviu Daia revised the configuration interface and added the
138<a href="postconf.5.html">main.cf</a> configuration feature.</li>
139
140<li> Liviu Daia revised the configuration interface and added the <a href="postconf.5.html">main.cf</a>
141configuration feature.</li>
142
143<li> Liviu Daia with further refinements from Jose Luis Tallon and
144Victor Duchovni developed the common query, result_format, domain and
145expansion_limit interface for LDAP, MySQL and PosgreSQL.</li>
146
147<li> Leandro Santi updated the PostgreSQL client after the PostgreSQL
148developers made major database API changes in response to SQL
149injection problems, and made PQexec() handling more robust. </li>
150
151</ul>
152
153</body>
154
155</html>
156