Поддержка поисковых таблиц pgsql позволяет Postfix обращаться к конфигурацонной информации, хранящейся на серверах баз данных PostgreSQL. Этот инструмент позволяет работать с множеством баз данных : использовать одну базу для таблицы virtual(5), другую - для access(5), третью - для таблицы aliases(5) Возможно использование нескольких серверов для одной и той-же базы данных, Postfix автоматически переключится на другой (вспомогательный) сервер баз данных, если основной не сможет обслуживать запросы по той или иной причине.
Высоконагруженные почтовые сервера , использующие PostgreSQL, генерируют множество параллельных pgsql-запросов, поэтому PostgreSQL сервер(а) должны быть соответствующим образом настроены, имейте это в виду. Вы можете уменьшить количество соединений с сервером баз данных используя сервис Postfix proxymap(8)
Заметка: для использования PostgreSQL с Postfix в Debian GNU/Linux's все , что вам нужно - это инсталлировать пакет postfix-pgsql. Пересборка Postfix не требуется.
Для сборки Postfix с поддержкой PostgreSQL, Вам необходимо добавить -DHAS_PGSQL, имя каталога, содержащего заголовочные файлы PostgreSQL, и расположение библиотеки libpq:
Пример
% make tidy % make -f Makefile.init makefiles \ 'CCARGS=-DHAS_PGSQL -I/usr/local/include/pgsql' \ 'AUXLIBS=-L/usr/local/lib -lpq'
Затем, просто запускаем 'make'.
Если Postfix собран с поддержкой баз данных PostgreSQL, Вы можете заставить его работать с ними. Для этого внесите изменения в конфигурационный файл main.cf , например такие:
/etc/postfix/main.cf: alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf
Файл /etc/postfix/pgsql-aliases.cf содержит информацию, объясняющую Postfix, как работать c базой данных PostgreSQL. Полное описание дано в документе pgsql_table(5)
# # Конфигурационный файл pgsql для таблицы поиска local(8) aliases(5) # # # Хосты баз данных , c которыми пытается установить соединение Postfix hosts = host1.some.domain host2.some.domain #Имя пользователя и пароль сервера баз данных. user = someone password = some_password # Имя базы данных. dbname = customer_database # Шаблон SQL запроса для Postfix 2.2 и выше. Смотрите pgsql_table(5). query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid' #Для версий Postfix младше 2.2. Подробности в документе pgsql_table(5). select_field = forw_addr table = mxaliases where_field = alias # Не забывайте про "AND"! additional_conditions = AND status = 'paid'
Те хосты , которые используют несколько серверов для транспорта почты, имеют возможность обращаться к общим конфигурационным параметрам, хранящимся в одной общей базе данных, но отказ в обслуживании этого единственного SQL-сервера обычно приводит к остановке всей почтовой системы.
Для повышения надежности в Postfix включена возможность доступа к нескольким серверам баз данных (с одинаковым содержимым,естесственно). Это будет работать в том случае, если администраторы настроили реплицикацию необходимой базы данных Postgres на нескольколько серверов - эти машины и будут резервировать друг друга.
Если запросы к одному хосту заканчиваются неудачей, остальные хосты опрашиваются в случайном порядке. Когда ни один сервер баз данных недостижим, передача почты останавливается до того момента, когда хотя бы один из PostgreSQL серверов станет доступен.