Доступ к PostgreSQL из программ на языке Tcl
Что для этого необходимо?
Только лишь пакет libpgtcl, который содержит необходимую библиотеку
libpgtcl.so.
Стандартный Tcl не содержит средств для доступа к PostgreSQL, но
поскольку этот язык выполнен так, что может расширять свои возможности
через подружаемые библиотеки, то наличие библиотеки libpgtcl.so -
это все что нужно.
Предоставляемый сервис
Несмотря на то, что весь набор операторов сводится к pg_connect,
pg_exec, pg_select и pg_disconnect - это все что нужно.
- pg_connect - обеспечивает подключеник заданной базе данных
- pg_disconnect - обеспечивает отключение от базы данных
- pg_exec - предназначен для тех операторов SQL, которые не возвращают информацию
- pg_select - предназначен для тех операторов SQL, которые возвращают набор данных
pg_connect
Оператор имеет одну опцию: -conninfo, однако именно в этой опции,
указываются все необходимые для подключения параметры, такие как host -
машина, где работает сервер PostgreSQL, dbname - имя базы данных,
к которой мы хотим подключиться, user - имя пользователя, с правами
которого мы хотим осуществить подключение и password - его пароль.
Оператор возвращает значени уникального декскриптора базы, который затем
используется всеми другими операторами, в случае успешного подключения. В
случае неудачи, срабатывает исключение, которое можно обработать командой
Tcl catch.
pg_disconnect
Все назначение оператора pg_disconnect состоит в закрытии сеанса
соединения с базой данных. Для этого оператору нужен только один параметр -
уникальный дискриптор, полученный в результате выполнения pg_connect.
pg_exec
Этот оператор необходим для выполнения таких операторов языка SQL, как
INSERT, UPDATE, DELETE и т.д, словом всех операторов SQL, в результате
выполнения которых не возвращается информация.
Для этого необходимы два параметра: уникальный декскриптор, полученный
через pg_connect и строка, в которой записан оператор SQL.
pg_select
Само название оператора предполагает, что он будет использоваться при
выполнении запросов к базе данных с использованием оператора SELECT.
Оператор имеет четыре параметра:
- Уникальный дескриптор, полученный через pg_connect
- Строка, в которой расположен текст запроса на языке SQL
- Имя переменной, которая будет играть роль массива-приемника информации
- Команда, которая будет выполняться для каждой полученной записи из набора данных
Простой пример
В данном примере, несмотря на простоту присутствуют все вышеописанные операторы:
#!/bin/sh
# \
exec tclsh "$0" "$@"
# подгружаем библиотеку
load libpgtcl.so
# подготавливаем параметры для соединения
set host "server"
set dbname "traffic"
set user "victor"
set password "orel1"
# пытаемся подключиться к базе данных
set result [catch {set dbc [pg_connect -conninfo "host=$host dbname=$dbname user=$user password=$password"]}]
# если result не ноль, то выдаем ошибку
if {$result} {
puts "Не удалось подключиться к базе данных. Проверьте параметры соединения"
exit
}
# в противном случае, соединение удалось, а в переменной dbc находится
# уникальный дескриптор
# делаем запрос к базе данных на получение всей информации из таблицы clients_tbl
# при этом, названия полей (name, money, rang) выступают в виде индексов
# ассоциативного массива с именем answer
pg_select $dbc "SELECT * FROM clients_tbl" answer {
puts "Клиент: $answer(name)"
puts "Имеет денег: $answer(money)"
puts "Его ранг: $answer(rang)"
}
# удаляем из таблицы всех клиентов, у которых денег меньше чем 1000
# Поскольку информация не возвращается, воспользуемя оператором pg_exec
pg_exec $dbc "DELETE FROM clients_tbl WHERE money<1000"
# Закрываем соединение с базой данных
pg_disconnect $dbc