Глава 4. Клиентская программа psql

Все примеры в этом руководстве будут иллюстрироваться как сеансы работы простейшей клиентской программы — psql. Это клиент для СУБД PostgreSQL. Вот как выглядит типичный сеанс:

[tz@coneforest ~/work/54/doc/inf/databases]% psql имя_БД
Welcome to psql 8.2.6, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

имя_БД=# ЗАПРОС₁;
ОТВЕТ₁
имя_БД=# ЗАПРОС₂;
ОТВЕТ₂
имя_БД=# \q
[tz@coneforest ~/work/54/doc/inf/databases]% 

Поясним, что здесь происходило.

Во-первых, вызываем из командной строки командной оболочки программу psql. В командной строке указываем название существующей БД (имя_БД), к которой следует подключиться. После нескольких строчек приветствия «Welcome to psql …» появляется собственная командная строка программы psql, которой предшествует собственное приглашение (которое содержит имя БД, и завершается знаком решётки). В этой командной строке мы вводим запрос и получаем ответ на него. После появившегося приглашения вводим второй запрос и слова видим ответ. Теперь мы завершаем работу с командной SQL-оболочкой psql, введя псевдокоманду \q (так было сказано в приветственных строках — «\q to quit»). После выхода из psql мы возвращаемся в командную оболочку операционной системы.

[Замечание]Замечание
Можно было для выхода нажать Ctrl+D.

Видно, что SQL-оболочка psql играет по отношению к языку SQL ту же роль, что и командная оболочка операционной системы (я использую zsh) по отношению к командному языку.

Разберём более конкретный пример.

ФГУП Главный научно-исследовательский вычислительный центр Федеральной Налоговой Службы распространяет таблицы базы данных КЛАДР, содержащие информацию об адресных объектах различных уровней (населённые пункты, улицы, дома) и об их привязке к почтовым отделениям и управлениям налоговой службы. Эти таблицы (в формате СУБД DBase) доступны здесь.

Эти таблицы импортированы нами в PostgreSQL в базу данных kladr4. Таблица, к которой происходит обращения в приведённом ниже примере, называется kladr, и содержит информацию об объектах верхнего уровня (населённых пунктах).

Первый запрос к БД kladr4 выбирает из таблицы kladr все населённые пункты, принадлежащие субъекту Федерации № 77 (в Конституции РФ под этим номером записана Москва). Признаком принадлежности к 77-му региону является то, что значение в колонке code начинается с 77. Между прочим, в версии КЛАДР от 2009-09-29 в таблице kladr 189870 записей.

Второй запрос требует ту же самую выборку, но теперь уже упорядоченную по названиям адресных объектов.

[tz@coneforest ~/work/54/doc/inf/databases]% psql kladr4
Welcome to psql 8.2.6, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

kladr4=# SELECT * FROM kladr WHERE code LIKE '77%';
        name         | socr |     code      | index  
---------------------+------+---------------+--------
 Крюково             | пос  | 7700000200500 | 
 Москва              | г    | 7700000000000 | 
 Внуково             | пос  | 7700000000200 | 
 Восточный           | пос  | 7700000000300 | 105173
 Главмосстроя        | пос  | 7700000000400 | 123308
 Загорье             | пос  | 7700000000600 | 115598
 Заречье             | пос  | 7700000000700 | 121115
 Измайловская Пасека | пос  | 7700000001000 | 111123
 Лесной              | пос  | 7700000001200 | 121500
 Лесные Сторожки     | пос  | 7700000001300 | 127253
 Матвеевское         | пос  | 7700000001500 | 119501
 Милицейский         | пос  | 7700000001600 | 142002
 Мневники Нижние     | пос  | 7700000001700 | 123423
 Новобратцевский     | пос  | 7700000002100 | 
 Новобутаково        | пос  | 7700000002200 | 125481
 Новомалино          | пос  | 7700000002300 | 124681
 Подушкино           | пос  | 7700000002400 | 127543
 Рублево             | пос  | 7700000002500 | 
 Сосновка            | пос  | 7700000002600 | 121500
 Терехово            | пос  | 7700000002800 | 123423
 Шлюзы               | пос  | 7700000003200 | 109383
 Толстопальцево      | пос  | 7700000003300 | 
 Бутово              | пос  | 7700000003400 | 117623
 Ухтомский           | пос  | 7700000003500 | 111402
 Мещерский           | пос  | 7700000003700 | 119618
 Свиблово            | пос  | 7700000004300 | 129323
 Толстопальцево      | дер  | 7700000004400 | 143350
 Акулово             | пгт  | 7700000004500 | 105173
 Зеленоград          | г    | 7700000200000 | 
 Кутузово            | дер  | 7700000200200 | 124681
 Рожки               | пос  | 7700000200300 | 124681
 Малино              | пос  | 7700000200400 | 124681
 Назарьево           | пос  | 7700000200600 | 124489
 Алабушево           | пос  | 7700000200700 | 124460
 Некрасовка          | пос  | 7700000004000 | 140008
(35 rows)

kladr4=# SELECT * FROM kladr WHERE code LIKE '77%' ORDER BY name;
        name         | socr |     code      | index  
---------------------+------+---------------+--------
 Акулово             | пгт  | 7700000004500 | 105173
 Алабушево           | пос  | 7700000200700 | 124460
 Бутово              | пос  | 7700000003400 | 117623
 Внуково             | пос  | 7700000000200 | 
 Восточный           | пос  | 7700000000300 | 105173
 Главмосстроя        | пос  | 7700000000400 | 123308
 Загорье             | пос  | 7700000000600 | 115598
 Заречье             | пос  | 7700000000700 | 121115
 Зеленоград          | г    | 7700000200000 | 
 Измайловская Пасека | пос  | 7700000001000 | 111123
 Крюково             | пос  | 7700000200500 | 
 Кутузово            | дер  | 7700000200200 | 124681
 Лесной              | пос  | 7700000001200 | 121500
 Лесные Сторожки     | пос  | 7700000001300 | 127253
 Малино              | пос  | 7700000200400 | 124681
 Матвеевское         | пос  | 7700000001500 | 119501
 Мещерский           | пос  | 7700000003700 | 119618
 Милицейский         | пос  | 7700000001600 | 142002
 Мневники Нижние     | пос  | 7700000001700 | 123423
 Москва              | г    | 7700000000000 | 
 Назарьево           | пос  | 7700000200600 | 124489
 Некрасовка          | пос  | 7700000004000 | 140008
 Новобратцевский     | пос  | 7700000002100 | 
 Новобутаково        | пос  | 7700000002200 | 125481
 Новомалино          | пос  | 7700000002300 | 124681
 Подушкино           | пос  | 7700000002400 | 127543
 Рожки               | пос  | 7700000200300 | 124681
 Рублево             | пос  | 7700000002500 | 
 Свиблово            | пос  | 7700000004300 | 129323
 Сосновка            | пос  | 7700000002600 | 121500
 Терехово            | пос  | 7700000002800 | 123423
 Толстопальцево      | пос  | 7700000003300 | 
 Толстопальцево      | дер  | 7700000004400 | 143350
 Ухтомский           | пос  | 7700000003500 | 111402
 Шлюзы               | пос  | 7700000003200 | 109383
(35 rows)

kladr4=# \q
[tz@coneforest ~/work/54/doc/inf/databases]% 
Информатика-54