Microsoft Windows и PostgreSQLM

Покольку PostgreSQL изначально писался для UNIX систем, то неудивительно, что до сих пор не существует версии для Microsoft Windows.

Впрочем, в документации к версии 6.5 есть упоминание, что для Windows NT портирование серверной части с использованием библиотеки Cygnus было недавно завершено. Сам я, правда, не смотрел и не пробовал, но если есть люди, у которых это работает, то прошу откликнуться и черкнуть пару строк.

Однако как для Windows95/98 так и для Windows NT с давних пор существовали ODBC и JDBC драйвера, при использовании которых можно было вполне сносно работать с сервером PostgreSQL, работающим на каком-либо UNIX'е. Далее речь пойдет об ODBC драйверах.

ODBC драйвера и их установка

Первый и наверняка наиболее серьезный вопрос состоит в наверное уже крылатой фразе: "А где возьмешь?". Что сказать вам по этому поводу? Взять можно во многих местах. В FAQ к PostgreSQL нас отсылают на http://www.openlinksw.com. Ну был я там, но ничего не понял. Где брать, как брать? Если у кого-то получилось, то напишите мне с подробной инструкцией для идиотов, чтобы ваша инструкция заменила то нытье, что я здесь пишу. А пока позвольте мне рассказать как я нашел ODBC драйвера.

Я пошел другим путем. А именно через поисковые сервера. Среди той кучи ссылок, что я получил на запрос "Postgres+ODBC" большая часть просто не работала, а подавляющее большинство остальных выдавало нечто совершенно древнее. Тем не менее я нашел кое-что, а именно файл postdrv.exe, который я положил сюда, дабы не заставлять вас тратить время понапрасну.

Это самораспаковывающийся архив в установкой через InstallShield. То есть все, что вам нужно сделать для установки, это скачать данных файл в какой-нибудь временный каталог, а затем запустить его. Однако, для того, чтобы начать работать, установки недостаточно. Вам еще необходимо произвести настройку ODBC через ODBC Administrator, который вызывается из окна Панель управления (Control Panel) под именем 32bit ODBC.

Перед тем как начать описание процесса настройки хочу сразу же сделать замечение. Эти ODBC драйвера не первой свежести (кто скажет, где найти свежее скажу спасибо). В настройках вы увидите, что поддерживаются протоколы только до версии PostgreSQL 6.4, хотя есть уже PostgreSQL 6.5. Однако, я опробовал эти драйверы и могу с уверенностью сказать, что с версией 6.5 они вполне работают.

Настройка OBDC драйверов

Итак, запускаем 32bit ODBC. В результате получаем диалоговое окно, следующего вида:

У вас в окне по всей видимости будет пусто. У меня, как видите уже установлен ODBC драйвер для Interbase. Нажимаем кнопку Add... и снова получаем диалоговое окно вида:

Выбираем "PostgreSQL" и нажимаем кнопку Готово. В результате имеем еще одно окно вида:

Поля Database, Server, Username и Password в вашем случае будут пустыми и вам необходимо заполнить их самостоятельно. Тут никаких трудностей возникнуть не должно: Database - база данных, с которой вы будете работать, Server - машина, на которой работает PostgreSQL, Username и Password - соответственно имя пользователя и пароль с использованием которых будет осуществляться подключение к базе данных (это значит, что на сервере с PostgreSQL у вас должен быть заведен пользователь именно с таким именем и паролем).

Параметр Port вам необходимо сменить только в том случае, если вы работаете с нестандартным портом (см. файл /etc/postgresql/postmaster.init на предмет изменения номера порта).

Как видно из рисунка, есть еще две кнопки Driver и DataSource.

При нажатии на кнопку Driver получаем окно вида:

В этом окне я рекомендую установить флажки Recognize Unique Indexes и Parse Statement. Если вам нужно протоколирование транзакций, то установите CommitLog(C:\postodbc.log. Какие настройки включают остальные флажки - понятия не имею (если кто обьяснит, скажу спасибо).

При нажатии на кнопку DataSource получаем окно вида:

Сразу же рекомендую убрать флажек ReadOnly. А вот Protocol нужно установить в зависимости от версии PostgreSQL, с которой вы работаете. Я также включаю флажек Show Column, так как он не мешает. А вот для чего нужны остальные настройки я снова буду рад услышать от грамотных людей.

Финал

Ну вот собственно и все. Теперь вы можете работать с сервером PostgreSQL, с помощью любой программы в Microsoft Windows, которая знает как общаться через ODBC драйвера.

Замечания по Delphi

Эти два случая из моего опыта работы с PostgreSQL из Delphi.

Первую фичу я обнаружил на методе AppendRecord. Оказывается, чтобы данный метод отработал успешно, нужно первым элементом списка ставить nil, иначе, при выполнении возникнет ошибка. Т.е. теперь AppendRecord будет выглядеть, например так:

    MyQuery.AppendRecord([nil, 1, 'Василий', 'Иванович', 'Чапаев']);

а не так, как делается, например, при работе с Interbase:

    MyQuery.AppendRecord([1, 'Василий', 'Иванович', 'Чапаев']);

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

Симптомом послужило то, что при обращении к PostgreSQL из программы на Deplhi, сама программа повесилась намертво. При этом курсор принимал на экране характерную форму при выполнении SQL запроса. Однако этот запрос все продолжал выполняться и продолжал... Через 5 минут мне это надоело и я снял задачу принудительно.

Чем было вызвано зависание программы, я даже не знаю. По идее, должен был отработать тайм-аут, по истечении которого должна была появиться ошибка, но этого не случилось. Может виновата кривость BDE, может ODBC драйвера.

Вылечилось просто - на сервере был перезапущен PostgreSQL.

Назад | Содержание | Вперед