Postfix PostgreSQL Howto


はじめに

Postfix pgsql マップタイプを使うと、Postfix は PostgreSQL データベースに 接続できるようになります。この実装は複数の pgsql データベースを考慮して います: お望みなら1つを virtual(5) テーブルに、 もう1つを access(5) テーブルに、そして別の 1つを aliases(5) テーブルに使えます。同じ データベースに対して複数のサーバを指定することができるため、1つが 使えなくなっても Postfix は使えるデータベースサーバに切り替えることが できます。

pgsql マップを使う忙しいメールサーバは同時に大量の pgsql クライアントを 生成するため、pgsql サーバはそのことを念頭に置いて動かすべきです。 Postfix proxymap(8) サービスを使って、 並列に動く pgsql クライアント数を減らすことができます。

PostgreSQL をサポートした Postfix の構築

注意: Debian GNU/Linux の Postfix で pgsql を使うには、postfix-pgsql パッケージをインストールするだけで終わりです。Postfix を再コンパイルする 必要はありません。

pgsql マップをサポートした Postfix を構築するには、-DHAS_PGSQL と PostgreSQL ヘッダを含むディレクトリに対して -I を、そして libpq ライブラリファイルの場所を AUXLIBS に加える必要があります。

例:

% make tidy
% make -f Makefile.init makefiles \
        'CCARGS=-DHAS_PGSQL -I/usr/local/include/pgsql' \
        'AUXLIBS=-L/usr/local/lib -lpq'

そして、単に 'make' を走らせます。

PostgreSQL 検索テーブルを設定する

pgsql をサポートした Postfix を構築したら、main.cf で以下のように マップタイプを指定できます:

/etc/postfix/main.cf:
    alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf

ファイル /etc/postfix/pgsql-aliases.cf には Postfix に pgsql データベースを参照する方法を伝えるたくさんの情報を指定します。完全な 記述は pgsql_table(5) マニュアルページを 参照してください。

例: ローカルエイリアス

#
# local(8) aliases(5) 検索用の pgsql 設定ファイル
#

#
# Postfix が接続を試そうとするホスト
hosts = host1.some.domain host2.some.domain

# pgsql サーバにログインするためのユーザ名とパスワード。
user = someone
password = some_password

# サーバ上でのデータベース名。
dbname = customer_database

# Postfix 2.2以降のSQLクエリテンプレート。pgsql_table(5) 参照。
query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid'

# 2.2以前のPostfixリリース用。詳細は pgsql_table(5) 参照。
select_field = forw_addr
table = mxaliases
where_field = alias
# 最初の "AND" を忘れないで!
additional_conditions = AND status = 'paid'

# additional_conditions を指定するか空のままにします。
additional_conditions = and status = 'paid'

ミラー化されたデータベースの利用

複数のメール交換機を必要とするサイトはネットワーク化されたメーラ データベースを使う利便性を楽しむ反面、システムの単一点障害を持ち込み たくはないでしょう。

そのため、一つの pgsql マップに対するアクセスするのに、Postfix が 複数のホストを参照する機能を持たせました。これはサイトがミラー化された pgsql データベースを 2つ以上のホストでセットアップした場合に働きます。

一つのホストでクエリが失敗するたびに、残りのホストがランダムな順序で 試されます。どの pgsql サーバホストにも到達できなければ、少なくとも これらのホストのうちの 1つが到達可能になるまでメールは遅延されます。

クレジット