Доступ к 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