Сервер PostgreSQL и MS Access
Сервер PostgreSQL пока мало распространён в нашей стране. Можно много гадать о причинах такого положения дел. Существенную роль тут, возможно, сыграла "доступность" большинства из хорошо известных коммерческих серверов фирм Oracle, Microsoft, Sybase и других. Кроме того, практически у каждого крупного поставщика средств разработки есть свой собственный сервер, часто идущий в комплекте, который в первую очередь и пытаются использовать программисты. И ещё, очень важно, на мой взляд, что долгое время отсутствовала возможность запустить сервер PostgreSQL под Windows. Теперь острота этой проблемы снята и можно без особого труда установить сервер PostgreSQL практически на любую версию Windows. Как это сделать достаточно подробно описано в заметке «Установка PostgreSQL под Windows'98». Во многих других странах ситуация иная. PostgreSQL известен не менее, чем MySQL и во многих случаях замещает последний, если требуются возможности, которые тот пока обеспечить не в состоянии. Также он там часто применяется в различных бюджетных организациях (медицинских, образовательных и т.п.). О распространённости и высоком качестве PostgreSQL говорит и тот факт, что компания Red Hat выбрала его в качестве "придворного" сервера баз данных для своих дистрибутивов Linux. Следствием этого является присутствие PostgreSQL в отечественном дистрибутиве от ASP Linux. Но наиболее важно другое - работа над сервером ведётся очень активно и из вспомогательного инструмента, обеспечивающего поддержку работы с базами данных для web-серверов, PostgreSQL в последнее время превращается в полноценный "движок", пригодный для использования в традиционных системах учёта, построенных по технологии клиет-сервер. А, как известно, клиентская часть таких систем часто создаётся с помощью MS Access. Коротко о самом сервере Я не хочу глубоко вдаваться в историю и лишь отмечу, что PostgreSQL уходит своими корнями в проект Postgres, который возглавлял профессор Калифорнийского Университета Микаэль Стоунбрейкер (Michael Stonebraker) и который субсидировался несколькими фондами и агенствами, преимущественно военными. Основной платформой для PostgreSQL в настоящее время является Linux и другие UNIX-подобные операционные системы. Специальной версии для Windows не существует, хотя какие-то работы в этом направлении ведутся. Пока имеется возможность установить сервер PostgreSQL на практически всех версиях Windows с помощью эмулятора CygWin, в состав которого входит уже скомпилированный сервер PostgreSQL. Не считая проблем с поддержкой русской локали и несколько пониженного быстродействия, такой вариант вполне работоспособен. Что касается средств администрирования, то это не самая сильная сторона PostgreSQL. Хотя необходимые программы конечно же имеются (архивация и восстановление, выполнение запросов, получение статистической информации и т.п.), все они имеют интерфейс командной строки. Единственное более-менее нормальное средство с графическим интерфейсом под Windows - pgAdmin II. Есть ещё что-то на PHP (с web-интерфейсом), но лично для меня такой вариант пока не очень удобен. В отличие от многих других серверов, PostgreSQL поддерживает согласованность данных при многопользовательской работе используя не блокировки, а многоверсионную модель (MVCC - Multiversion Concurrency Control). Это означает, что каждая транзакция видит состояние данных таким, каким оно было на момент старта этой транзакции, независимо от текущего состояния данных. Таким образом, транзакция защищена от просмотра противоречивых данных, наличие которых может быть обусловлено действиями другой, параллельно выполняющейся транзакции. Если таблицу всё же необходимо заблокировать, то это можно сделать с помощью специальной команды LOCK. Ссылочная целостность поддерживается вполне традиционным путём, с помощью определения ограничений (Constraints). Параметры ограничений достаточно разнообразны и охватывают все мыслимые случаи поведения при попытках нарушить целостность данных (каскадные удаления и обновления, работа с NULL и т.д.). Типы данных За свою долгую историю, PostgreSQL поднакопил приличное количество разнообразных типов данных, в том числе весьма экзотических (point, line, polygon, bit, macaddr и т.д.). Если и этого недостаточно, то можно создавать свои собственные типы и определять операции над ними. Также поддерживаются многомерные массивы переменной длины. При работе же с PostgreSQL через MS Access наиболее важны следующие типы данных:
Таким образом, наиболее существенным изъяном при использовании Access'97 можно считать отсутствие в PostgreSQL типа, который бы абсолютно точно соответствовал денежному типу данных и соответственно распознавался бы ODBC драйвером. В случае Access'2002 такой проблемы и вовсе не возникает. Кроме того, приходится учитывать некоторые особенности применения тех или иных типов и, возможно, предпринимать специальные меры для обеспечения корректной работы. ODBC драйвер ODBC драйвер для Windows в комплект поставки сервера, конечно, не входит. Его надо загрузить с отдельного сайта, ссылка на который может быть без труда обнаружена на основном сайте PostgreSQL. Установка драйвера никаких проблем не вызывает. Для подключения к серверу нужно создать пользовательский или системный DSN и для правильной работы с Access установить, как минимум, следующие параметры:
Полученный DSN можно использовать для присоединения таблиц и представлений сервера, однако надо помнить следующее:
Драйвер поддерживает установку соединения и без создания DSN, однако в этом случае все необходимые параметры должны быть указаны в строке подключения. Драйвер постоянно совершенствуется, поэтому расположение параметров в диалоговых окнах, их состав и значения по умолчанию могут со временем меняться. Программирование сервера Возможности сервера PostgreSQL в области программирования очень велики и разнообразны. Есть возможность создавать хранимые процедуры (точнее - функции) на нескольких языках (SQL, PL/PgSQL, PL/PgTCL, PL/Perl, PL/Python) и даже добавлять свои собственные языки. В текущей версии функции не могут возвращать наборы данных, однако уже в версии 7.3 это будет реализовано. Встроенные и пользовательские функции можно использовать в качестве значений по умолчанию полей таблиц. Никаких особых ограничений на такие функции не накладывается. В частности, внутри них можно производить выборку данных из таблиц и возвращать результат, основанный на этой выборке. Триггеры также поддерживаются и могут срабатывать как до (Before), так и после (After) выполнения модификации данных. Срабатывают они для каждой записи отдельно. Триггеры, срабатывающие единожды для целого кортежа пока не реализованы. Агрегатные функции представлены обычным набором (count, sum, max, min и т.д.) и могут быть добавлены. Таким образом, например, можно определить функцию, которая будет объединять значения текстового поля из нескольких записей. Операторы поддерживаются в достаточном количестве и ассортименте и, как я уже отмечал раньше, могут быть добавлены самостоятельно. В качестве примера ниже перечислены встроенные математические операторы:
Система безопасности Первой частью системы безопасности можно считать систему аутентификации подключений к серверу и создания шифрованных сессий. Вся информация о возможности (или невозможности) подключения и режимы проверки задаются в файле pg_hba.conf. Говоря коротко, в этом файле хранится информация о том, кто к каким базам данных с каких компьютеров может получить доступ и как он должен доказать свои полномочия. Вторая часть системы безопасности - это традиционное разделение прав доступа для пользователей и групп. В текущей версии разграничение доступа поддерживается только для таблиц и представлений. В следующей версии 7.3 планируется существенно улучшить эту систему. Ссылки Основной сайт PostgreSQL (точнее - список зеркал). Это главный информационный ресурс, который содержит множество разделов, посвященных как самому серверу, так и связанным с ним программам. Русскоязычный сайт, посвященный PostgreSQL. Информации содержит довольно мало. Наиболее активная русскоязычная конференция по PostgreSQL. Немного там порывшись, можно найти ответы на очень многие вопросы. Есть поиск.
Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=6106 |