Доступ к базам данных под управлением СУБД POSTGRES95
Доступ к базам данных под
управлением СУБД POSTGRES95
В СУБД POSTGRES95 реализованы две
основные возможности доступа к
своим базам данных:
- через psql - интерфейс командной
строки командной оболочки Shell;
- из прикладной программы,
написанной на языке
программирования Си (или
другом языке) с использованием
функций прикладного
интерфейса LIBPQ.
Psql - это интерактивный
терминальный монитор, позволяющий
пользователю формулировать,
редактировать и выполнять наборы
команд - операторов языка POSTQUEL. Он
запускается в режиме командной
строки ОС UNIX с указанием имени базы
данных:
% psql polyn
Пользователь может
непосредственно из командной
строки монитора вводить одну за
другой SQL-команды, а может
передавать запрос в виде файла с
SQL-операторами через командную
строку ОС UNIX:
% psql
Интерфейс командной строки psql
обычно используют администраторы
баз данных для создания,
модификации и удаления отношений,
заведения и предоставления прав
новым пользователям и т.д. Он
достаточно удобен для ввода
больших массивов информации в базу
данных и вывода простых отчетов.
Интерактивный монитор не позволяет
генерировать сложные формы
отчетов, так как с его помощью
нельзя сделать разборку
полученного результата для
формирования новых запросов, и
поэтому его использование в
прикладных программах достаточно
ограниченно.
LIBPQ - прикладной программный
интерфейс POSTGRES95. Он представлен
набором библиотечных функций
(подпрограмм), которые позволяют
клиентским программам посылать
запросы серверу СУБД и получать от
него соответствующие результаты.
Для этого в прикладную программу
включают главный файл библиотеки
libpq-fe.h , встраивают функции LIBPQ и
производят компиляцию кода
программы с библиотеками POSTGRES95.
Схема доступа к базам данных из
внешних программ достаточно
простая. С помощью специальной
функции PQsetdb устанавливается
TCP-соединение по определенному
порту (как правило, - 5432) прикладной
программы с процессом-демоном
postmaster'ом. При этом функции
передаются параметры значений
имени базы данных, IP-адреса сервера,
порта соединения. Далее при
успешном соединении происходит
выполнение в рамках функции PQexec
SQL-операторов языка запросов POSTQUEL -
открытие транзакции с базой данных,
выполнение запроса и закрытие
транзакции. После этого происходит
завешение соединения с базой
данных. При выполнении запроса по
выбору данных из БД POSTGRES95 создает
временную таблицу, в которую
помещает полученный результат.
Используя SQL-операторы, связанные с
курсорами, и специальные функции
LIBPQ по работе с кортежами, полями
отношений, достаточно просто
осуществляется доступ к элементам
результирующей таблицы, что
приводит к генерации произвольных
отчетов по запросам пользователей.
Ниже приведен фрагмент
Cи-программы, реализующей запрос к
базе данных "polyn":
pghost= "ns.polyn.kiae.su"
pgport= "5432";
pgoptions=NULL;
pgtty=NULL;
dbname= "polyn"
/*установка соединения с базой данных */
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbname);
/* проверка статуса выполнения соединения */
if (PQstatus(conn)== CONNECTION_BAD)
{ printf("connection to database '%s' failed", dbname);
printf("%s", PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}
/* начало транзакции с БД*/
res=PQexec(conn,"BEGIN");
/* проверка статуса выполнения функции */
if (PQresultStatus(res)!=PGRES_COMMAND_OK)
{ printf("BEGIN command failed");
PQclear(res);
PQfinish(conn);
exit(1); }
PQclear(res);
/* выполнение SQL-опреатора установки курсора на результат запроса выбора поля isotop из отношения isotop */
res=PQexec(conn,"DECLARE myportal CURSOR FOR select isotop.isotop from isotop ");
/* выполнение оператора чтения по курсору */
res=PQexec(conn,"FETCH ALL in myportal");
/* определение количества кортежей и атрибутов в результирующей таблице */
ntups = PQntuples(res);
nflds = PQnfields(res);
/* вывод имен атрибутов */
for (i=0; i
%s
",PQfname(res,i));
}
/* вывод элементов результирующего отношения */
for(i=0; i%sn",PQgetvalue(res,i,j));
}
}
PQclear(res);
/* закрытие курсора */
res=PQexec(conn,"CLOSE myportal");
PQclear(res);
/* закрытие транзакции */
res=PQexec(conn,"END");
PQclear(res);
/* закрытие соединения*/
PQfinish(conn);
Для осуществления доступа к базам
данных POSTGRES95 из World Wide Web можно
использовать любые описанные выше
механизмы - CGI, FastCGI, API, Java. Например,
API-модуль сервера Apache PHP
поддерживает взаимодействие с
библиотеками POSTGRES95, а также
разработаны два ODBC-драйвера, PostODBC и
OpenLink ODBC, которые упрощают
разработку программ-шлюзов. Но все
же не стоит забывать и о достаточно
удобном и простом средстве
построения интерактивных
приложений - Common Gataway Interface, который
не требует никакого
дополнительного программного
обеспечения и достаточно легок в
применении. В качестве примера
использования CGI для доступа к
базам данных под управлением POSTGRES95
можно привести созданную для РНЦ
"Курчатовский институт"
информационную систему базы
численных данных о радиационном
загрязнении 30-км зоны вокруг ЧАЭС
"Проба" на Web-сервере Apache.
Создание информационной системы
было направлено на выполнение
следующих задач:
- Ввод новой информации в БД для
ведения базы данных.
- Генерация отчетов по запросам
пользователей.
Структура взаимодействия
программного обеспечения
информационной системы выглядит
следующим образом (рис. 5). Согласно
технологии WWW, сервер протокола HTTP
Apache, работающий, как правило, по 80-му
порту стека протоколов TCP-IP,
принимает запросы от пользователя
с помощью клиентских программ
просмотра гипертекстовых
документов (Netscape Navigator, Internet Explorer, Lynx
и др.). Формализованный доступ к
данным в рамках информационной
системы осуществляется на основе
HTML-форм. С их помощью введенные в
поля формы данные передаются на
сервер Apache, который вызывает
указанную в форме CGI-программу для
обработки этих параметров и
передает ей управление. CGI-скрипт с
помощью функций прикладного
интерфейса СУБД POSTGRES95 преобразует
данные в SQL-запрос, устанавливает
соединение с сервером СУБД и
передает ему запрос на выполнение.
Сервер СУБД выполняет запрос,
обращаясь к БД "Проба" и
возвращает результат CGI-скрипту,
который, в свою очередь, формирует
"на-лету" HTML-документ и через
сервер Apache передает его клиенту.
Рис. 5. Структура взаимодействия
программного обеспечения
информационной системы
Все навигационные
HTML-страницы информационной системы
сгенерированны CGI-программами, так
как все HTML-формы - для введения
поисковых критериев (рис.6) и ввода
новых данных для обновления БД
(рис.7)- содержат значения из файлов
словарей, что обеспечивает более
удобный интерфейс и более быстрое
заполнение форм.
Для данной
информационной системы недостатки
CGI, связанные с порождением нового
процесса не так существенны -
потеря происходит лишь в
незначительных затратах времени на
ожидание ответа сервера. Но если
необходима аутентификация каждого
пользователя и его ведение во время
сеанса взаимодействия с базой
данных, то, на взгляд автора, FastCGI
является наилучшим решением этого
вопроса. То есть использование того
или иного средства зависит прежде
всего от поставленной задачи для
реализации - что необходимо в
первую очередь обеспечить при ее
решении
Рис. 6. Интерфейсная страница для
поиска данных
Рис. 7. HTML-страница для обновления
базы данных
[Назад] [Содержание] [Вперед]
|