Russian version
English version
ОБ АЛЬЯНСЕ | НАШИ УСЛУГИ | КАТАЛОГ РЕШЕНИЙ | ИНФОРМАЦИОННЫЙ ЦЕНТР | СТАНЬТЕ СПОНСОРАМИ SILICON TAIGA | ISDEF | КНИГИ И CD | ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ | УПРАВЛЕНИЕ КАЧЕСТВОМ | РОССИЙСКИЕ ТЕХНОЛОГИИ | НАНОТЕХНОЛОГИИ | ЮРИДИЧЕСКАЯ ПОДДЕРЖКА | АНАЛИТИКА | КАРТА САЙТА | КОНТАКТЫ
 
Программное обеспечение
 
Для зарегистрированных пользователей
 
РАССЫЛКИ НОВОСТЕЙ
IT-Новости
Новости компаний
Российские технологии
Новости ВПК
Нанотехнологии
 
Поиск по статьям
 
RSS-лента
Подписаться
ОС и Офисное ПО

Сервер 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 наиболее важны следующие типы данных:

Тип данных PostgreSQL  Тип данных MS Access  Комментарии 
INTEGER Длинное целое 32-битное целое.
SMALLINT Целое 16-битное целое.
BIGINT Текст Access'97 не поддерживает 64-битные целые.
VARCHAR(N) Текстовый Размер не должен превышать 254 символа, хотя PostgreSQL допускает и больше.
DOUBLE PRECISION С плавающей точкой (8 байт)  
REAL С плавающей точкой (4 байт)  
DATE Дата/Время Только дата
TIMESTAMP Дата/Время Дата и время
BOOLEAN Логический  
NUMERIC(precision, scale) С плавающей точкой (8 байт) или текст в Access'97 и Действительное в Access'2002. Денежного типа нет, а заменяющий его NUMERIC в Access'97 преобразуется ODBC-драйвером в число с плавающей точкой (8 байт) при точности (precision) не более 15 и текст при большей точности. Access'2002 нормально работает с этим типом данных.
TEXT Поле MEMO  
BYTEA Поле объекта OLE Работает очень медленно и подвержен перекодировке, если кодовая страница БД и клиентской программы не совпадают.
SERIAL Длинное целое Используется для автоинкремента, как Счётчик в Access. На самом деле, это обычный INTEGER, для которого автоматически создаётся последовательность, которая используется при установке значения по умолчанию.
 

Таким образом, наиболее существенным изъяном при использовании Access'97 можно считать отсутствие в PostgreSQL типа, который бы абсолютно точно соответствовал денежному типу данных и соответственно распознавался бы ODBC драйвером. В случае Access'2002 такой проблемы и вовсе не возникает.

Кроме того, приходится учитывать некоторые особенности применения тех или иных типов и, возможно, предпринимать специальные меры для обеспечения корректной работы.

ODBC драйвер

ODBC драйвер для Windows в комплект поставки сервера, конечно, не входит. Его надо загрузить с отдельного сайта, ссылка на который может быть без труда обнаружена на основном сайте PostgreSQL. Установка драйвера никаких проблем не вызывает.

Для подключения к серверу нужно создать пользовательский или системный DSN и для правильной работы с Access установить, как минимум, следующие параметры:

  • Установить флаг Recognize Unique Indexes.
  • В группе Data Type Options установить флаги Text as LongVarChar и Unknowns as LongVarChar, а также снять флаг Bools as Char.
  • Max Varchar задать равным 254.
  • Max LongVarChar задать равным 8190.
  • В группе Unknown Sizes указать Maximum.
  • В группе Protocol выставить версию Вашего сервера.

Полученный DSN можно использовать для присоединения таблиц и представлений сервера, однако надо помнить следующее:

  1. Чтобы таблицу можно было редактировать, для неё должен существовать уникальный индекс или первичный ключ.
  2. Чтобы представление (VIEW) также было обновляемым, необходимо определить для него правила (RULES) добавления, изменения и удаления, но даже это помогает только для серверов версий 7.1.X и, вероятно, более ранних. В версиях 7.2.X работать с обновляемыми представлениями непосредственно из таблиц и связанных форм Access невозможно.
  3. Уникальные индексы и первичные ключи для представлений автоматически не распознаются, поэтому их надо указывать вручную в процессе подключения таблицы или путем создания псевдоиндекса.

Драйвер поддерживает установку соединения и без создания DSN, однако в этом случае все необходимые параметры должны быть указаны в строке подключения.

Драйвер постоянно совершенствуется, поэтому расположение параметров в диалоговых окнах, их состав и значения по умолчанию могут со временем меняться.

Программирование сервера

Возможности сервера PostgreSQL в области программирования очень велики и разнообразны. Есть возможность создавать хранимые процедуры (точнее - функции) на нескольких языках (SQL, PL/PgSQL, PL/PgTCL, PL/Perl, PL/Python) и даже добавлять свои собственные языки. В текущей версии функции не могут возвращать наборы данных, однако уже в версии 7.3 это будет реализовано.

Встроенные и пользовательские функции можно использовать в качестве значений по умолчанию полей таблиц. Никаких особых ограничений на такие функции не накладывается. В частности, внутри них можно производить выборку данных из таблиц и возвращать результат, основанный на этой выборке.

Триггеры также поддерживаются и могут срабатывать как до (Before), так и после (After) выполнения модификации данных. Срабатывают они для каждой записи отдельно. Триггеры, срабатывающие единожды для целого кортежа пока не реализованы.

Агрегатные функции представлены обычным набором (count, sum, max, min и т.д.) и могут быть добавлены. Таким образом, например, можно определить функцию, которая будет объединять значения текстового поля из нескольких записей.

Операторы поддерживаются в достаточном количестве и ассортименте и, как я уже отмечал раньше, могут быть добавлены самостоятельно. В качестве примера ниже перечислены встроенные математические операторы:

Символ  Название  Пример  Результат 
+ Сложение 2 + 3 5
- Вычитание 2 - 3 -1
* Умножение 2 * 3 6
/ Деление 4 / 2 2
% Модуль (остаток) 5 % 4 1
^ Возведение в степень 2.0 ^ 3.0 8
// Квадратный корень // 25.0 5
/// Кубический корень /// 27.0 3
! Факториал 5 ! 120
!! Факториал (префиксный) !! 5 120
@ Абсолютное значение @ -5.0 5
& Побитовое AND 91 & 15 11
/ Побитовое OR 32 / 3 35
# Побитовое XOR 17 # 5 20
~ Побитовое NOT ~1 -2
<< Побитовый сдвиг влево 1 << 4 16
>> Побитовый сдвиг вправо 8 >> 2 2
 

Система безопасности

Первой частью системы безопасности можно считать систему аутентификации подключений к серверу и создания шифрованных сессий. Вся информация о возможности (или невозможности) подключения и режимы проверки задаются в файле pg_hba.conf. Говоря коротко, в этом файле хранится информация о том, кто к каким базам данных с каких компьютеров может получить доступ и как он должен доказать свои полномочия.

Вторая часть системы безопасности - это традиционное разделение прав доступа для пользователей и групп. В текущей версии разграничение доступа поддерживается только для таблиц и представлений. В следующей версии 7.3 планируется существенно улучшить эту систему.

Ссылки

Основной сайт PostgreSQL (точнее - список зеркал). Это главный информационный ресурс, который содержит множество разделов, посвященных как самому серверу, так и связанным с ним программам.

Русскоязычный сайт, посвященный PostgreSQL. Информации содержит довольно мало.

Наиболее активная русскоязычная конференция по PostgreSQL. Немного там порывшись, можно найти ответы на очень многие вопросы. Есть поиск.


  Рекомендовать страницу   Обсудить материал Написать редактору  
  Распечатать страницу
 
  Дата публикации: 15.04.2006  

ОБ АЛЬЯНСЕ | НАШИ УСЛУГИ | КАТАЛОГ РЕШЕНИЙ | ИНФОРМАЦИОННЫЙ ЦЕНТР | СТАНЬТЕ СПОНСОРАМИ SILICON TAIGA | ISDEF | КНИГИ И CD | ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ | УПРАВЛЕНИЕ КАЧЕСТВОМ | РОССИЙСКИЕ ТЕХНОЛОГИИ | НАНОТЕХНОЛОГИИ | ЮРИДИЧЕСКАЯ ПОДДЕРЖКА | АНАЛИТИКА | КАРТА САЙТА | КОНТАКТЫ

Дизайн и поддержка: Silicon Taiga   Обратиться по техническим вопросам  
Rambler's Top100 Rambler's Top100