Доступ к базам данных под управлением СУБД POSTGRES95

Автор: codenet Сайт: http://www.codenet.ru/
   
   В СУБД POSTGRES95 реализованы две основные возможности доступа к своим базам данных:
   
   через psql - интерфейс командной строки командной оболочки Shell;
   из прикладной программы, написанной на языке программирования Си (или другом языке) с использованием функций прикладного интерфейса LIBPQ.
   Psql - это интерактивный терминальный монитор, позволяющий пользователю формулировать, редактировать и выполнять наборы команд - операторов языка POSTQUEL. Он запускается в режиме командной строки ОС UNIX с указанием имени базы данных:
   
    % psql polyn
   
   Пользователь может непосредственно из командной строки монитора вводить одну за другой SQL-команды, а может передавать запрос в виде файла с SQL-операторами через командную строку ОС UNIX:
   
    % psql < query.sql
   
   Интерфейс командной строки 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<nflds; i++) {
    printf("<td bgcolor=#20B2AA align=center>h3> %slt;</td>",
    PQfname(res,i));
    }
   /* вывод элементов результирующего отношения */
   for(i=0; i<ntups; i++) {
    for (j=0; j<nflds; j++) {
    printf("<td bgcolor=#20B2AA align=center>%s</td>\n",
    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. Создание информационной системы было направлено на выполнение следующих задач:
   
   Ввод новой информации в БД для ведения базы данных.
   Генерация отчетов по запросам пользователей.
   Согласно технологии WWW, сервер протокола HTTP Apache, работающий, как правило, по 80-му порту стека протоколов TCP-IP, принимает запросы от пользователя с помощью клиентских программ просмотра гипертекстовых документов (Netscape Navigator, Internet Explorer, Lynx и др.). Формализованный доступ к данным в рамках информационной системы осуществляется на основе HTML-форм. С их помощью введенные в поля формы данные передаются на сервер Apache, который вызывает указанную в форме CGI-программу для обработки этих параметров и передает ей управление. CGI-скрипт с помощью функций прикладного интерфейса СУБД POSTGRES95 преобразует данные в SQL-запрос, устанавливает соединение с сервером СУБД и передает ему запрос на выполнение. Сервер СУБД выполняет запрос, обращаясь к БД "Проба" и возвращает результат CGI-скрипту, который, в свою очередь, формирует "на-лету" HTML-документ и через сервер Apache передает его клиенту.
   
   

Опубликовано: HTTP://WWW.R-T-F-M.INFO, pauk ©® 2000-2011.
All rights reserved.
При перепечатки ссылка на сайт обязательна.
Мнение администрации сайта не всегда совпадает с мнением автора..