Expand PMF_FN_* macros.
[netbsd-mini2440.git] / external / ibm-public / postfix / dist / man / man5 / pgsql_table.5
blobc5575a7dcb6dba214c6eff3ceb40492aeb86e60c
1 .\"     $NetBSD$
2 .\"
3 .TH PGSQL_TABLE 5 
4 .ad
5 .fi
6 .SH NAME
7 pgsql_table
8 \-
9 Postfix PostgreSQL client configuration
10 .SH "SYNOPSIS"
11 .na
12 .nf
13 \fBpostmap -q "\fIstring\fB" pgsql:/etc/postfix/filename\fR
15 \fBpostmap -q - pgsql:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
16 .SH DESCRIPTION
17 .ad
18 .fi
19 The Postfix mail system uses optional tables for address
20 rewriting or mail routing. These tables are usually in
21 \fBdbm\fR or \fBdb\fR format.
23 Alternatively, lookup tables can be specified as PostgreSQL
24 databases.  In order to use PostgreSQL lookups, define a
25 PostgreSQL source as a lookup table in main.cf, for example:
26 .nf
27     alias_maps = pgsql:/etc/pgsql-aliases.cf
28 .fi
30 The file /etc/postfix/pgsql-aliases.cf has the same format as
31 the Postfix main.cf file, and can specify the parameters
32 described below.
33 .SH "BACKWARDS COMPATIBILITY"
34 .na
35 .nf
36 .ad
37 .fi
38 For compatibility with other Postfix lookup tables, PostgreSQL
39 parameters can also be defined in main.cf.  In order to do
40 that, specify as PostgreSQL source a name that doesn't begin
41 with a slash or a dot.  The PostgreSQL parameters will then
42 be accessible as the name you've given the source in its
43 definition, an underscore, and the name of the parameter.  For
44 example, if the map is specified as "pgsql:\fIpgsqlname\fR",
45 the parameter "hosts" below would be defined in main.cf as
46 "\fIpgsqlname\fR_hosts".
48 Note: with this form, the passwords for the PostgreSQL sources
49 are written in main.cf, which is normally world-readable.
50 Support for this form will be removed in a future Postfix
51 version.
53 Postfix 2.2 has enhanced query interfaces for MySQL and PostgreSQL,
54 these include features previously available only in the Postfix
55 LDAP client. In the new interface the SQL query is specified via
56 a single \fBquery\fR parameter (described in more detail below).
57 In Postfix 2.1 the parameter precedence was, from highest to lowest,
58 \fBselect_function\fR, \fBquery\fR and finally \fBselect_field\fR, ...
60 With Postfix 2.2 the \fBquery\fR parameter has highest precedence,
61 and is used in preference to the still supported, but slated to be
62 phased out, \fBselect_function\fR, \fBselect_field\fR, \fBtable\fR,
63 \fBwhere_field\fR and \fBadditional_conditions\fR parameters. To
64 migrate to the new interface set:
66 .nf
67     \fBquery\fR = SELECT \fIselect_function\fR('%s')
68 .fi
70 or in the absence of \fBselect_function\fR, the lower precedence:
72 .nf
73     \fBquery\fR = SELECT \fIselect_field\fR
74         FROM \fItable\fR
75         WHERE \fIwhere_field\fR = '%s'
76             \fIadditional_conditions\fR
77 .fi
79 Use the value, not the name, of each legacy parameter. Note
80 that the \fBadditional_conditions\fR parameter is optional
81 and if not empty, will always start with \fBAND\fR.
82 .SH "LIST MEMBERSHIP"
83 .na
84 .nf
85 .ad
86 .fi
87 When using SQL to store lists such as $mynetworks,
88 $mydestination, $relay_domains, $local_recipient_maps,
89 etc., it is important to understand that the table must
90 store each list member as a separate key. The table lookup
91 verifies the *existence* of the key. See "Postfix lists
92 versus tables" in the DATABASE_README document for a
93 discussion.
95 Do NOT create tables that return the full list of domains
96 in $mydestination or $relay_domains etc., or IP addresses
97 in $mynetworks.
99 DO create tables with each matching item as a key and with
100 an arbitrary value. With SQL databases it is not uncommon to
101 return the key itself or a constant value.
102 .SH "PGSQL PARAMETERS"
107 .IP "\fBhosts\fR"
108 The hosts that Postfix will try to connect to and query from.
109 Specify \fIunix:\fR for UNIX-domain sockets, \fIinet:\fR for TCP
110 connections (default).  Example:
112     hosts = host1.some.domain host2.some.domain
113     hosts = unix:/file/name
116 The hosts are tried in random order, with all connections over
117 UNIX domain sockets being tried before those over TCP.  The
118 connections are automatically closed after being idle for about
119 1 minute, and are re-opened as necessary.
121 NOTE: the \fIunix:\fR and \fIinet:\fR prefixes are accepted for
122 backwards compatibility reasons, but are actually ignored.
123 The PostgreSQL client library will always try to connect to an
124 UNIX socket if the name starts with a slash, and will try a TCP
125 connection otherwise.
126 .IP "\fBuser, password\fR"
127 The user name and password to log into the pgsql server.
128 Example:
130     user = someone
131     password = some_password
133 .IP "\fBdbname\fR"
134 The database name on the servers. Example:
136     dbname = customer_database
138 .IP "\fBquery\fR"
139 The SQL query template used to search the database, where \fB%s\fR
140 is a substitute for the address Postfix is trying to resolve,
141 e.g.
143     query = SELECT replacement FROM aliases WHERE mailbox = '%s'
146 This parameter supports the following '%' expansions:
148 .IP "\fB\fB%%\fR\fR"
149 This is replaced by a literal '%' character. (Postfix 2.2 and later)
150 .IP "\fB\fB%s\fR\fR"
151 This is replaced by the input key.
152 SQL quoting is used to make sure that the input key does not
153 add unexpected metacharacters.
154 .IP "\fB\fB%u\fR\fR"
155 When the input key is an address of the form user@domain, \fB%u\fR
156 is replaced by the SQL quoted local part of the address.
157 Otherwise, \fB%u\fR is replaced by the entire search string.
158 If the localpart is empty, the query is suppressed and returns
159 no results.
160 .IP "\fB\fB%d\fR\fR"
161 When the input key is an address of the form user@domain, \fB%d\fR
162 is replaced by the SQL quoted domain part of the address.
163 Otherwise, the query is suppressed and returns no results.
164 .IP "\fB\fB%[SUD]\fR\fR"
165 The upper-case equivalents of the above expansions behave in the
166 \fBquery\fR parameter identically to their lower-case counter-parts.
167 With the \fBresult_format\fR parameter (see below), they expand the
168 input key rather than the result value.
170 The above %S, %U and %D expansions are available with Postfix 2.2
171 and later
172 .IP "\fB\fB%[1-9]\fR\fR"
173 The patterns %1, %2, ... %9 are replaced by the corresponding
174 most significant component of the input key's domain. If the
175 input key is \fIuser@mail.example.com\fR, then %1 is \fBcom\fR,
176 %2 is \fBexample\fR and %3 is \fBmail\fR. If the input key is
177 unqualified or does not have enough domain components to satisfy
178 all the specified patterns, the query is suppressed and returns
179 no results.
181 The above %1, ... %9 expansions are available with Postfix 2.2
182 and later
185 The \fBdomain\fR parameter described below limits the input
186 keys to addresses in matching domains. When the \fBdomain\fR
187 parameter is non-empty, SQL queries for unqualified addresses
188 or addresses in non-matching domains are suppressed
189 and return no results.
191 The precedence of this parameter has changed with Postfix 2.2,
192 in prior releases the precedence was, from highest to lowest,
193 \fBselect_function\fR, \fBquery\fR, \fBselect_field\fR, ...
195 With Postfix 2.2 the \fBquery\fR parameter has highest precedence,
196 see COMPATIBILITY above.
198 NOTE: DO NOT put quotes around the \fBquery\fR parameter.
199 .IP "\fBresult_format (default: \fB%s\fR)\fR"
200 Format template applied to result attributes. Most commonly used
201 to append (or prepend) text to the result. This parameter supports
202 the following '%' expansions:
204 .IP "\fB\fB%%\fR\fR"
205 This is replaced by a literal '%' character.
206 .IP "\fB\fB%s\fR\fR"
207 This is replaced by the value of the result attribute. When
208 result is empty it is skipped.
209 .IP "\fB%u\fR
210 When the result attribute value is an address of the form
211 user@domain, \fB%u\fR is replaced by the local part of the
212 address. When the result has an empty localpart it is skipped.
213 .IP "\fB\fB%d\fR\fR"
214 When a result attribute value is an address of the form
215 user@domain, \fB%d\fR is replaced by the domain part of
216 the attribute value. When the result is unqualified it
217 is skipped.
218 .IP "\fB\fB%[SUD1-9]\fR\fB"
219 The upper-case and decimal digit expansions interpolate
220 the parts of the input key rather than the result. Their
221 behavior is identical to that described with \fBquery\fR,
222 and in fact because the input key is known in advance, queries
223 whose key does not contain all the information specified in
224 the result template are suppressed and return no results.
227 For example, using "result_format = smtp:[%s]" allows one
228 to use a mailHost attribute as the basis of a transport(5)
229 table. After applying the result format, multiple values
230 are concatenated as comma separated strings. The expansion_limit
231 and parameter explained below allows one to restrict the number
232 of values in the result, which is especially useful for maps that
233 must return at most one value.
235 The default value \fB%s\fR specifies that each result value should
236 be used as is.
238 This parameter is available with Postfix 2.2 and later.
240 NOTE: DO NOT put quotes around the result format!
241 .IP "\fBdomain (default: no domain list)\fR"
242 This is a list of domain names, paths to files, or
243 dictionaries. When specified, only fully qualified search
244 keys with a *non-empty* localpart and a matching domain
245 are eligible for lookup: 'user' lookups, bare domain lookups
246 and "@domain" lookups are not performed. This can significantly
247 reduce the query load on the PostgreSQL server.
249     domain = postfix.org, hash:/etc/postfix/searchdomains
252 It is best not to use SQL to store the domains eligible
253 for SQL lookups.
255 This parameter is available with Postfix 2.2 and later.
257 NOTE: DO NOT define this parameter for local(8) aliases,
258 because the input keys are always unqualified.
259 .IP "\fBexpansion_limit (default: 0)\fR"
260 A limit on the total number of result elements returned
261 (as a comma separated list) by a lookup against the map.
262 A setting of zero disables the limit. Lookups fail with a
263 temporary error if the limit is exceeded.  Setting the
264 limit to 1 ensures that lookups do not return multiple
265 values.
266 .SH "OBSOLETE QUERY INTERFACES"
271 This section describes query interfaces that are deprecated
272 as of Postfix 2.2.  Please migrate to the new \fBquery\fR
273 interface as the old interfaces are slated to be phased
274 out.
275 .IP "\fBselect_function\fR"
276 This parameter specifies a database function name. Example:
278     select_function = my_lookup_user_alias
281 This is equivalent to:
283     query = SELECT my_lookup_user_alias('%s')
286 This parameter overrides the legacy table-related fields (described
287 below). With Postfix versions prior to 2.2, it also overrides the
288 \fBquery\fR parameter. Starting with Postfix 2.2, the \fBquery\fR
289 parameter has highest precedence, and the \fBselect_function\fR
290 parameter is deprecated.
292 The following parameters (with lower precedence than the
293 \fBselect_function\fR interface described above) can be used to
294 build the SQL select statement as follows:
297     SELECT [\fBselect_field\fR]
298     FROM [\fBtable\fR]
299     WHERE [\fBwhere_field\fR] = '%s'
300           [\fBadditional_conditions\fR]
303 The specifier %s is replaced with each lookup by the lookup key
304 and is escaped so if it contains single quotes or other odd
305 characters, it will not cause a parse error, or worse, a security
306 problem.
308 Starting with Postfix 2.2, this interface is obsoleted by the more
309 general \fBquery\fR interface described above. If higher precedence
310 the \fBquery\fR or \fBselect_function\fR parameters described above
311 are defined, the parameters described here are ignored.
312 .IP "\fBselect_field\fR"
313 The SQL "select" parameter. Example:
315     \fBselect_field\fR = forw_addr
317 .IP "\fBtable\fR"
318 The SQL "select .. from" table name. Example:
320     \fBtable\fR = mxaliases
322 .IP "\fBwhere_field\fR
323 The SQL "select .. where" parameter. Example:
325     \fBwhere_field\fR = alias
327 .IP "\fBadditional_conditions\fR
328 Additional conditions to the SQL query. Example:
330     \fBadditional_conditions\fR = AND status = 'paid'
332 .SH "SEE ALSO"
335 postmap(1), Postfix lookup table manager
336 postconf(5), configuration parameters
337 ldap_table(5), LDAP lookup tables
338 mysql_table(5), MySQL lookup tables
339 .SH "README FILES"
344 Use "\fBpostconf readme_directory\fR" or
345 "\fBpostconf html_directory\fR" to locate this information.
348 DATABASE_README, Postfix lookup table overview
349 PGSQL_README, Postfix PostgreSQL client guide
350 .SH "LICENSE"
355 The Secure Mailer license must be distributed with this software.
356 .SH "HISTORY"
359 PgSQL support was introduced with Postfix version 2.1.
360 .SH "AUTHOR(S)"
363 Based on the MySQL client by:
364 Scott Cotton, Joshua Marcus
365 IC Group, Inc.
367 Ported to PostgreSQL by:
368 Aaron Sethman
370 Further enhanced by:
371 Liviu Daia
372 Institute of Mathematics of the Romanian Academy
373 P.O. BOX 1-764
374 RO-014700 Bucharest, ROMANIA