mysql_table.5.html   [plain text]

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<title> Postfix manual - mysql_table(5) </title>
</head> <body> <pre>
MYSQL_TABLE(5)                                                  MYSQL_TABLE(5)

       mysql_table - Postfix MySQL client configuration

       <b>postmap -q "</b><i>string</i><b>" <a href="mysql_table.5.html">mysql</a>:/etc/postfix/filename</b>

       <b>postmap -q - <a href="mysql_table.5.html">mysql</a>:/etc/postfix/</b><i>filename</i> &lt;<i>inputfile</i>

       The  Postfix  mail system uses optional tables for address
       rewriting or mail routing. These tables are usually in <b>dbm</b>
       or <b>db</b> format.

       Alternatively,  lookup  tables  can  be specified as MySQL
       databases.  In order to use MySQL lookups, define a  MySQL
       source as a lookup table in <a href="postconf.5.html"></a>, for example:
           <a href="postconf.5.html#alias_maps">alias_maps</a> = <a href="mysql_table.5.html">mysql</a>:/etc/

       The file /etc/postfix/ has the same format
       as the Postfix <a href="postconf.5.html"></a> file, and can specify  the  parame-
       ters described below.

       For  compatibility with other Postfix lookup tables, MySQL
       parameters can also be defined in <a href="postconf.5.html"></a>.  In order to do
       that,  specify  as  MySQL source a name that doesn't begin
       with a slash or a dot.  The MySQL parameters will then  be
       accessible as the name you've given the source in its def-
       inition, an underscore, and the  name  of  the  parameter.
       For example, if the map is specified as "<a href="mysql_table.5.html">mysql</a>:<i>mysqlname</i>",
       the parameter "hosts" below would be defined in <a href="postconf.5.html"></a> as

       Note:  with this form, the passwords for the MySQL sources
       are written in <a href="postconf.5.html"></a>, which is normally  world-readable.
       Support  for this form will be removed in a future Postfix

       Normally, the SQL query is specified via  a  single  <b>query</b>
       parameter  (described  in  more  detail below).  When this
       parameter is not specified in the map definition,  Postfix
       reverts  to  an  older  interface, with the SQL query con-
       structed from the  <b>select_field</b>,  <b>table</b>,  <b>where_field</b>  and
       <b>additional_conditions</b>  parameters.  The old interface will
       be gradually phased out. To migrate to the  new  interface

           <b>query</b> = SELECT [<i>select</i><b>_</b><i>field</i>]
               FROM [<i>table</i>]
               WHERE [<i>where</i><b>_</b><i>field</i>] = '%s'

       Insert  the value, not the name, of each legacy parameter.
       Note that the <b>additional_conditions</b> parameter is  optional
       and if not empty, will always start with <b>AND</b>.

       When using SQL to store lists such as $<a href="postconf.5.html#mynetworks">mynetworks</a>, $<a href="postconf.5.html#mydestination">mydes</a>-
       <a href="postconf.5.html#mydestination">tination</a>, $<a href="postconf.5.html#relay_domains">relay_domains</a>, $<a href="postconf.5.html#local_recipient_maps">local_recipient_maps</a>, etc.,  it
       is  important to understand that the table must store each
       list member as a separate key. The table  lookup  verifies
       the  *existence*  of  the  key.  See "Postfix lists versus
       tables" in the <a href="DATABASE_README.html">DATABASE_README</a> document for a  discussion.

       Do  NOT create tables that return the full list of domains
       in $<a href="postconf.5.html#mydestination">mydestination</a> or $<a href="postconf.5.html#relay_domains">relay_domains</a> etc., or IP  addresses
       in $<a href="postconf.5.html#mynetworks">mynetworks</a>.

       DO create tables with each matching item as a key and with
       an arbitrary value. With SQL databases it is not  uncommon
       to return the key itself or a constant value.

       <b>hosts</b>  The  hosts  that Postfix will try to connect to and
              query from.  Specify <i>unix:</i> for UNIX domain sockets,
              <i>inet:</i> for TCP connections (default).  Example:
                  hosts = host1.some.domain host2.some.domain:port
                  hosts = unix:/file/name

              The  hosts are tried in random order, with all con-
              nections  over  UNIX  domain  sockets  being  tried
              before  those  over TCP.  The connections are auto-
              matically closed  after  being  idle  for  about  1
              minute,  and  are  re-opened  as necessary. Postfix
              versions 2.0 and earlier do not randomize the  host

              NOTE:  if you specify localhost as a hostname (even
              if you prefix it with <i>inet:</i>), MySQL will connect to
              the  default  UNIX  domain  socket.   In  order  to
              instruct MySQL to connect to localhost over TCP you
              have to specify
                  hosts =

       <b>user, password</b>
              The  user  name  and password to log into the mysql
              server.  Example:
                  user = someone
                  password = some_password

       <b>dbname</b> The database name on the servers. Example:
                  dbname = customer_database

       <b>query</b>  The SQL query template used to search the database,
              where <b>%s</b> is a substitute for the address Postfix is
              trying to resolve, e.g.
                  query = SELECT replacement FROM aliases WHERE mailbox = '%s'

              This parameter supports the  following  '%'  expan-

              <b>%%</b>     This is replaced by a literal '%' character.

              <b>%s</b>     This is replaced  by  the  input  key.   SQL
                     quoting  is used to make sure that the input
                     key does not add unexpected  metacharacters.

              <b>%u</b>     When the input key is an address of the form
                     user@domain,  <b>%u</b>  is  replaced  by  the  SQL
                     quoted  local  part  of the address.  Other-
                     wise, <b>%u</b> is replaced by  the  entire  search
                     string.   If  the  localpart  is  empty, the
                     query is suppressed and returns no  results.

              <b>%d</b>     When the input key is an address of the form
                     user@domain,  <b>%d</b>  is  replaced  by  the  SQL
                     quoted  domain  part of the address.  Other-
                     wise, the query is suppressed and returns no

              <b>%[SUD]</b> The  upper-case  equivalents  of  the  above
                     expansions behave  in  the  <b>query</b>  parameter
                     identically  to  their  lower-case  counter-
                     parts.   With  the  <b>result_format</b>  parameter
                     (see  below),  they  expand  the  input  key
                     rather than the result value.

              <b>%[1-9]</b> The patterns %1, %2, ... %9 are replaced  by
                     the corresponding most significant component
                     of the input key's domain. If the input  key
                     is <i></i>, then %1 is <b>com</b>, %2
                     is <b>example</b> and %3 is <b>mail</b>. If the input  key
                     is  unqualified  or  does  not  have  enough
                     domain components to satisfy all the  speci-
                     fied  patterns,  the query is suppressed and
                     returns no results.

              The <b>domain</b> parameter  described  below  limits  the
              input  keys  to addresses in matching domains. When
              the <b>domain</b> parameter is non-empty, SQL queries  for
              unqualified  addresses or addresses in non-matching
              domains are suppressed and return no results.

              This parameter is available with  Postfix  2.2.  In
              prior  releases  the  SQL  query was built from the
              separate    parameters:    <b>select_field</b>,     <b>table</b>,
              <b>where_field</b>  and <b>additional_conditions</b>. The mapping
              from the old parameters to the equivalent query is:

                  SELECT [<b>select_field</b>]
                  FROM [<b>table</b>]
                  WHERE [<b>where_field</b>] = '%s'

              The '%s' in the <b>WHERE</b> clause expands to the escaped
              search  string.   With  Postfix  2.2  these  legacy
              parameters  are  used if the <b>query</b> parameter is not

              NOTE: DO NOT put quotes around the query parameter.

       <b>result_format (default: %s</b>)
              Format  template applied to result attributes. Most
              commonly used to append (or prepend)  text  to  the
              result.  This  parameter supports the following '%'

              <b>%%</b>     This is replaced by a literal '%' character.

              <b>%s</b>     This  is replaced by the value of the result
                     attribute.  When  result  is  empty  it   is

              <b>%u</b>     When   the  result  attribute  value  is  an
                     address  of  the  form  user@domain,  <b>%u</b>  is
                     replaced  by  the local part of the address.
                     When the result has an empty localpart it is

              <b>%d</b>     When  a result attribute value is an address
                     of the form user@domain, <b>%d</b> is  replaced  by
                     the domain part of the attribute value. When
                     the result is unqualified it is skipped.

                     The upper-case and decimal digit  expansions
                     interpolate  the  parts  of  the  input  key
                     rather than the result.  Their  behavior  is
                     identical  to that described with <b>query</b>, and
                     in fact because the input key  is  known  in
                     advance,  queries whose key does not contain
                     all the information specified in the  result
                     template   are   suppressed  and  return  no

              For  example,  using  "result_format  =  <a href="smtp.8.html">smtp</a>:[%s]"
              allows one to use a mailHost attribute as the basis
              of a <a href="transport.5.html">transport(5)</a> table. After applying the  result
              format,  multiple  values are concatenated as comma
              separated strings. The expansion_limit and  parame-
              ter explained below allows one to restrict the num-
              ber of values in the result,  which  is  especially
              useful for maps that must return at most one value.

              The default value <b>%s</b>  specifies  that  each  result
              value should be used as is.

              This  parameter  is  available with Postfix 2.2 and

              NOTE: DO NOT put quotes around the result format!

       <b>domain (default: no domain list)</b>
              This is a list of domain names, paths to files,  or
              dictionaries.  When specified, only fully qualified
              search keys with  a  *non-empty*  localpart  and  a
              matching  domain  are  eligible  for lookup: 'user'
              lookups, bare domain lookups and "@domain"  lookups
              are  not  performed.  This can significantly reduce
              the query load on the MySQL server.
                  domain =, hash:/etc/postfix/searchdomains

              It is best not to use SQL to store the domains eli-
              gible for SQL lookups.

              This  parameter  is  available with Postfix 2.2 and

              NOTE: DO NOT define  this  parameter  for  <a href="local.8.html">local(8)</a>
              aliases, because the input keys are always unquali-

       <b>expansion_limit (default: 0)</b>
              A limit on the  total  number  of  result  elements
              returned  (as  a  comma separated list) by a lookup
              against the map.  A setting of  zero  disables  the
              limit.  Lookups  fail with a temporary error if the
              limit is exceeded.  Setting the limit to 1  ensures
              that lookups do not return multiple values.

       This  section describes an interface that is deprecated as
       of Postfix 2.2. It is replaced by the more  general  <b>query</b>
       interface  described  above.   If  the  <b>query</b> parameter is
       defined, the legacy  parameters  described  here  ignored.
       Please  migrate  to the new interface as the legacy inter-
       face may be removed in a future release.

       The following parameters can be used to fill in  a  SELECT
       template statement of the form:

           SELECT [<b>select_field</b>]
           FROM [<b>table</b>]
           WHERE [<b>where_field</b>] = '%s'

       The  specifier %s is replaced by the search string, and is
       escaped so if it contains single quotes or other odd char-
       acters, it will not cause a parse error, or worse, a secu-
       rity problem.

              The SQL "select" parameter. Example:
                  <b>select_field</b> = forw_addr

       <b>table</b>  The SQL "select .. from" table name. Example:
                  <b>table</b> = mxaliases

              The SQL "select .. where" parameter. Example:
                  <b>where_field</b> = alias

              Additional conditions to the SQL query. Example:
                  <b>additional_conditions</b> = AND status = 'paid'

<b>SEE ALSO</b>
       <a href="postmap.1.html">postmap(1)</a>, Postfix lookup table maintenance
       <a href="postconf.5.html">postconf(5)</a>, configuration parameters
       <a href="ldap_table.5.html">ldap_table(5)</a>, LDAP lookup tables
       <a href="pgsql_table.5.html">pgsql_table(5)</a>, PostgreSQL lookup tables
       <a href="sqlite_table.5.html">sqlite_table(5)</a>, SQLite lookup tables

       <a href="DATABASE_README.html">DATABASE_README</a>, Postfix lookup table overview
       <a href="MYSQL_README.html">MYSQL_README</a>, Postfix MYSQL client guide

       The  Secure  Mailer  license must be distributed with this

       MySQL support was introduced with Postfix version 1.0.

       Original implementation by:
       Scott Cotton, Joshua Marcus
       IC Group, Inc.

       Further enhancements by:
       Liviu Daia
       Institute of Mathematics of the Romanian Academy
       P.O. BOX 1-764
       RO-014700 Bucharest, ROMANIA

</pre> </body> </html>