Postfix pgsql マップタイプを使うと、Postfix は PostgreSQL データベースに 接続できるようになります。この実装は複数の pgsql データベースを考慮して います: お望みなら1つを virtual(5) テーブルに、 もう1つを access(5) テーブルに、そして別の 1つを aliases(5) テーブルに使えます。同じ データベースに対して複数のサーバを指定することができるため、1つが 使えなくなっても Postfix は使えるデータベースサーバに切り替えることが できます。
pgsql マップを使う忙しいメールサーバは同時に大量の pgsql クライアントを 生成するため、pgsql サーバはそのことを念頭に置いて動かすべきです。 Postfix proxymap(8) サービスを使って、 並列に動く pgsql クライアント数を減らすことができます。
注意: 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' を走らせます。
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 # テーブル名。 table = mxaliases # クエリコンポーネント、以下参照。 select_field = forw_addr where_field = alias # additional_conditions を指定するか空のままにします。 additional_conditions = and status = 'paid' # 上の変数はこの形のクエリとなります # # select forw_addr from mxaliases where alias = '$lookup' and status = 'paid' # # ($lookup はシングルクオートやその他の変な文字を含んでいるとエスケープされ、 # 問題を起こすことはありません)。 # # ビルトイン SELECT テンプレートを上書きすることもできます。詳細は # pgsql_table(5) を参照してください。
複数のメール交換機を必要とするサイトはネットワーク化されたメーラ データベースを使う利便性を楽しむ反面、システムの単一点障害を持ち込み たくはないでしょう。
そのため、一つの pgsql マップに対するアクセスするのに、Postfix が 複数のホストを参照する機能を持たせました。これはサイトがミラー化された pgsql データベースを 2つ以上のホストでセットアップした場合に働きます。
一つのホストでクエリが失敗するたびに、残りのホストがランダムな順序で 試されます。どの pgsql サーバホストにも到達できなければ、少なくとも これらのホストのうちの 1つが到達可能になるまでメールは遅延されます。