Доступ к базам данных под управлением СУБД POSTGRES95
В СУБД 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 %s