Как создать демо базу данных для курса Основы SQL
В учебном курсе «Основы SQL» для демонстрации работы SQL используется PostgreSQL. Сейчас это самая популярная из бесплатных систем управления базами данных. Все SQL запросы в курсе проверены на работоспособность именно в PostgreSQL. Однако большая часть запросов использует синтаксис стандарта ANSI SQL, поэтому они будут работать и в других системах, включая MySQL, Microsoft SQL Server и Oracle. Вы можете использовать любую систему управления базами данных, которая вам нравится, но я рекомендую PostgreSQL.
1. Загрузите PostgreSQL для вашей операционной системы на странице Downloads официального сайта. Я устанавливал на Windows, если вы используете другую операционную систему, то выбирайте соответствующие ссылки для загрузки. Примеры в курсе проверены на PostgreSQL 13, поэтому рекомендую устанавливать именно эту версию. Однако на предыдущих версиях, начиная с PosgreSQL 10, также все должно работать.
Инсталлятор для Windows и Mac OS загружается с сайта компании EDB, которая предоставляет платную поддержку для PostgreSQL. Однако PostgreSQL, которую вы установите с помощью этого инсталлятора от EDB, будет полностью бесплатной.
2. Запустите скачанный инсталлятор PostgreSQL.
Не забудьте запомнить или записать пароль пользователя postgres, он вам понадобится для подключения к базе и выполнения запросов!
После завершения установки инсталлятор предложит вам запустить Stack Builder для установки дополнительных утилит и компонентов. Этого можно не делать, просто снимите галочку в пункте «Stack Builder…» и нажмите кнопку «Finish».
pgAdmin
PgAdmin — это программа кроссплатформенного типа для работы с PostgreSQL-серверами. Подключив ПО, пользователи смогут создавать SQL-скрипты, отслеживать процессы и оперировать несколькими БД. Программа ориентирована на работу с PostgreSQL — от создания таблиц до запуска SQL-команд разного уровня сложности.
| Лицензия | Бесплатная |
| ОС | Windows |
| Язык интерфейса | Русский, английский |
| Разработка | pgAdmin Team |
| Разновидность программы | БД, администрирование |
Знакомство с меню
Меню pgAdmin включает немало полезных инструментов — подсветку строк, редактор, быстрый поиск. Функционал условно делится на 3 области:
- Слева — дерево всех объектов.
- Справа вверху — данные о конкретном объекте.
- Справа внизу — операторы, использованные для создания этого объекта.
Вопреки расхожему мнению, будто pgAdmin подходит для использования только профессионалами, разработчики ориентировались на выпуск продукта для широкого круга пользователей. В строку консоли необходимо вводить определенную команду, чтобы выполнить бэкап или восстановить БД программы 1С, но достаточно разобраться один раз — и типовые действия перестанут пугать и представлять сложность.
Настройка и подключение
Для СУБД вида PostgreSQL pgAdmin предоставляет оптимальный инструмент с точки зрения простоты и количества опций. Первым делом нужно бесплатно скачать pgAdmin для той версии «Виндовс», которая имеется на ПК, установить и произвести запуск.
Местом локации можно выбрать сервер пользовательской локальной сети и не обязательно именно тот, где находится СУБД PostgreSQL.
Надо соглашаться с мастером-установщиком, ставить галочки в нужных местах и нажимать Next. Когда ПО предложит выбрать каталог — назначить. В конце останется скомандовать Install. Через несколько секунд программа готова к запуску. Ссылка на неё будет находиться в меню компьютера «Пуск».
После первого запуска пользователь увидит рабочий стол ПО. Здесь потребуется сменить предустановленный английский на русский язык через опцию File — Preferences. Далее необходимо найти User language и завершить выбор.
Чтобы изменения вступили в силу, консоль требуется перезапустить. Следующим шагом надо подключиться к серверу СУБД PostgreSQL, если он, разумеется, предварительно установлен. Для этого выполняется команда «Добавить новый сервер», затем для него задаётся имя, любое удобное для пользователя.
Имя будет выглядеть как Base_(непосредственно имя). В завершении на вкладке «Соединения» надо заполнить несколько строчек:
- наименование сервера — это IP-адрес того сервера, где находится СУБД, проще говоря, где уже установлен и функционирует PostgreSQL;
- порт — менять не нужно, обычно по умолчанию выставлено 5432;
- если все сделано правильно, появится кнопка «Сохранить»;
- имя пользователя можно оставить как есть — Postgres;
- пароль — комбинация, которая была указана ранее, при установке Postgres, для пароля лучше поставить галочку «Сохранить», тогда программа не будет запрашивать этот набор символов при каждом обращении.
Скачать «Пгадмин» для Windows и выполнить перечисленные операции по созданию и назначению БД требуется лишь единожды. Затем, запуская ПО, пользователь будет работать с собственноручно созданной БД.
В результате появится картинка следующего типа.
Здесь отображены базы данных, их роли и зависимости, другие объекты, а также полезная информация:
- об активных сеансах, их количестве и статусе;
- число транзакций за секунду — они влияют на скорость;
- блокировки, сеансы и прочая статистика.
Для каждого упомянутого наименования применяются персональные настройки, с которыми довольно быстро освоится даже начинающий пользователь программ такого типа. В результате администрирование распространённого ПО, как 1С, значительно упростится. Заглянув на официальный сайт pgAdmin, можно найти несколько мануалов и советов по работе с ПО.
Графический интерфейс pgAdmin III
Инструментальные средства представляют собой программы, предназначенные для обслуживания БД, а также для выполнения вспомогательных действий при разработке приложений, например, для создания таблиц и отладки SQL-запросов. Совместно с PostgreSQL поставляется pgAdmin III, который применяется для работы как с локальными, так и с удаленными БД. Также существует интерактивная терминальная программа PostgreSQL, называемая psql, которая позволяет интерактивно вводить, редактировать и выполнять команды SQL. Запустить ее можно из Пуск/Все программы/PostgreSQL 8.3/SQL Shell (psql).
Есть и другие аналогичные программы, например, pgAgent, phpPgAdmin и др., но в рамках данного учебного пособия рассмотрим только графический интерфейс pgAdmin.
Главное окно pgAdmin
Графический интерфейс pgAdmin, поддерживающий все функции PostgreSQL, упрощает администрирование. Вы можете создавать новые объекты (БД, таблицы, триггеры и т.д.), удалять и изменять существующие объекты, если привилегии пользователя, под которым вы зашли, позволяют это. Главное окно pgAdmin содержит строку меню, панель инструментов и две панели (см. Рис. 43).
![]() |
| Рис. 43. Главное окно pgAdmin III |
Строка меню содержит пункты «Файл», «Правка», «Представление», «Сервис» «?». Основные операции, реализуемые с помощью строки меню, могут быть выполнены с помощью кнопок панели инструментов, рассмотренных ниже.
Назначение кнопок панели инструментов приведено ниже.








На левой панели, называемой браузером объектов, отображается дерево со всеми зарегистрированными серверами и их БД, а также элементы структуры, например, таблицы, представления, пользователи и т.д. В качестве имени сервера отображается его псевдоним, задаваемый при регистрации сервера.
В верхней части правой панели выводится информация об объекте, выбранном в левой панели.
В нижней правой части содержится скрипт создания выбранного объекта слева. Вы можете сохранить его, использовать в качестве шаблона.
Некоторые объекты могут иметь статистические данные в дополнение к своим свойствам, они могут быть показаны, если вы выберите вкладку Статистика.
Можно изменить размер главного окна, а также изменение размеров трех основных регионов, как вы предпочитаете. Эти изменения будут сохранены при выходе из программы.
Состояние объектов в окне браузера обновляется только по запросу или после изменения, сделанных с помощью встроенных средств. Обновления объектов не происходит при выполнении пользовательского SQL-скрипта или если другие пользователи БД сделали какие-то изменения на данном сервере. Поэтому рекомендуется обновлять объекты перед их изменением.
Компоненты ветки базы данных
На Рис. 14 представлен проводник с полностью раскрытыми узлами базы данных postgres, схемы uchebnaja. После имени узла в скобках указано количество объектов, содержащихся в этом узле. Ниже приведен краткий обзор представленного дерева. Работа с каждым конкретным объектом будет более подробно описана ниже.
Преобразования типов (Casts)
В PostgreSQL имеется возможность задавать для преобразования данных из одного типа в другой особую функцию для каждой базы данных. Например, результатом действия оператора SELECTCAST(42AStext), при должном задании функции, будет строка «сорок два».
Языки (Languages)
PostgreSQL позволяет использовать для написания функций несколько языков. Причем язык SQL может быть использован всегда, а другие языки следует подключать специальным образом. При установке мы разрешили процедурный язык PL/pgSQL (в браузере он называется plpgsql).
Схемы (Schemas)
Схема это всего лишь пространство имен. Имена объектов в базе данных (например, таблиц) должны быть уникальны в пределах схемы. В различных схемах они могут повторяться. Поскольку аналога схемам в MS SQL Server 2000 нет, то в дальнейшем в примерах ограничимся одной схемой, в проводнике база данных Disp имеет одну схему – main. Далее кратко рассмотрим, какие объекты входят в схемы. В дереве схемы main (см. Рис. 44) почти у всех узлов казано число 0 – ноль объектов. Если Вы перейдете в режим отображения системных объектов и рассмотрите схему pg_catalog, то Вы увидите там массу объектов.
![]() |
| Рис. 44. Отображение объектов базы данных в проводнике |
Агрегаты (Aggregates)
Агрегатные функции вычисляют одно значение исходя из множества входных значений. Имеется большое количество встроенных системных агрегатных функций, например AVG – среднее значение, подобная одноименной функции MS SQL Sever. В PostgreSQL пользователь может сам создавать подобные агрегатные функции.
Установка
Когда вы изучаете новый язык, самым важным аспектом является практика. Одно дело – прочитать статью и совсем другое – применить полученную информацию. Давайте начнем с установки базы данных на компьютер.
Первый шаг – установить SQL
Мы будем использовать PostgreSQL (Postgres) – достаточно распространенный SQL диалект. Для этого откроем страницу загрузки, выберем операционную систему (в моем случае Windows), и запустим установку. Если вы установите пароль для вашей базы данных, постарайтесь сразу не забыть его, он нам дальше понадобится. Поскольку наша база будет локальной, можете использовать простой пароль, например: admin.
Следующий шаг – установка pgAdmin
pgAdmin – это графический интерфейс пользователя (GUI – graphical user interface), который упрощает взаимодействие с базой данных PostgreSQL. Перейдите на страницу загрузки, выберите вашу операционную систему и следуйте указаниям (в статье используется Postgres 14 и pgAdmin 4 v6.3.).
После установки обоих компонентов открываем pgAdmin и нажимаем Add new server. На этом шаге установится соединение с существующим сервером, именно поэтому необходимо сначала установить Postgres. Я назвал свой сервер home и использовал пароль, указанный при установке.
Теперь всё готово к созданию таблиц. Давайте создадим набор таблиц, которые моделируют школу. Нам необходимы таблицы: ученики, классы, оценки. При создании модели данных необходимо учитывать, что в одном классе может быть много учеников, а у ученика может быть много оценок (такое отношение называется «один ко многим»).
Мы можем создать таблицы напрямую в pgAdmin, но вместо этого мы напишем код, который можно будет использовать в дальнейшем, например, для пересоздания таблиц. Для создания запроса, который создаст наши таблицы, нажимаем правой кнопкой мыши на postgres (пункт расположен в меню слева home → Databases (1) → postgres и далее выбираем Query Tool.
Начнем с создания таблицы классов (classrooms). Таблица будет простой: она будет содержать идентификатор id и имя учителя – teacher. Напишите следующий код в окне запроса (query tool) и запустите (run или F5).
DROP TABLE IF EXISTS classrooms CASCADE;
CREATE TABLE classrooms (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
teacher VARCHAR(100)
);
В первой строке фрагмент DROP TABLE IF EXISTS classrooms удалит таблицу classrooms, если она уже существует. Важно учитывать, что Postgres, не позволит нам удалить таблицу, если она имеет связи с другими таблицами, поэтому, чтобы обойти это ограничение (constraint) в конце строки добавлен оператор CASCADE. CASCADE – автоматически удалит или изменит строки из зависимой таблицы, при внесении изменений в главную. В нашем случае нет ничего страшного в удалении таблицы, поскольку, если мы на это пошли, значит мы будем пересоздавать всё с нуля, и остальные таблицы тоже удалятся.
Добавление DROP TABLE IF EXISTS перед CREATE TABLE позволит нам систематизировать схему нашей базы данных и создать скрипты, которые будут очень удобны, если мы захотим внести изменения – например, добавить таблицу, изменить тип данных поля и т. д. Для этого нам просто нужно будет внести изменения в уже готовый скрипт и перезапустить его.
Ничего нам не мешает добавить наш код в систему контроля версий. Весь код для создания базы данных из этой статьи вы можете посмотреть по ссылке.
Также вы могли обратить внимание на четвертую строчку. Здесь мы определили, что колонка id является первичным ключом (primary key), что означает следующее: в каждой записи в таблице это поле должно быть заполнено и каждое значение должно быть уникальным. Чтобы не пришлось постоянно держать в голове, какое значение id уже было использовано, а какое – нет, мы написали GENERATED ALWAYS AS IDENTITY, этот приём является альтернативой синтаксису последовательности (CREATE SEQUENCE). В результате при добавлении записей в эту таблицу нам нужно будет просто добавить имя учителя.
И в пятой строке мы определили, что поле teacher имеет тип данных VARCHAR (строка) с максимальной длиной 100 символов. Если в будущем нам понадобится добавить в таблицу учителя с более длинным именем, нам придется либо использовать инициалы, либо изменять таблицу (alter table).
Теперь давайте создадим таблицу учеников (students). Новая таблица будет содержать: уникальный идентификатор (id), имя ученика (name), и внешний ключ (foreign key), который будет указывать (references) на таблицу классов.
DROP TABLE IF EXISTS students CASCADE;
CREATE TABLE students (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name VARCHAR(100),
classroom_id INT,
CONSTRAINT fk_classrooms
FOREIGN KEY(classroom_id)
REFERENCES classrooms(id)
);
И снова мы перед созданием новой таблицы удаляем старую, если она существует, добавляем поле id, которое автоматически увеличивает своё значение и имя с типом данных VARCHAR (строка) и максимальной длиной 100 символов. Также в эту таблицу мы добавили колонку с идентификатором класса (classroom_id), и с седьмой по девятую строку установили, что ее значение указывает на колонку id в таблице классов (classrooms).
Мы определили, что classroom_id является внешним ключом. Это означает, что мы задали правила, по которым данные будут записываться в таблицу учеников (students). То есть Postgres на данном этапе не позволит нам вставить строку с данными в таблицу учеников (students), в которой указан идентификатор класса (classroom_id), не существующий в таблице classrooms. Например: у нас в таблице классов 10 записей (id с 1 до 10), система не даст нам вставить данные в таблицу учеников, у которых указан идентификатор класса 11 и больше.
INSERT INTO students
(name, classroom_id)
VALUES
('Matt', 1);
/*
ERROR: insert or update on table "students" violates foreign
key constraint "fk_classrooms"
DETAIL: Key (classroom_id)=(1) is not present in table
"classrooms".
SQL state: 23503
*/
Теперь давайте добавим немного данных в таблицу классов (classrooms). Так как мы определили, что значение в поле id будет увеличиваться автоматически, нам нужно только добавить имена учителей.
INSERT INTO classrooms
(teacher)
VALUES
('Mary'),
('Jonah');
SELECT * FROM classrooms;
/*
id | teacher
-- | -------
1 | Mary
2 | Jonah
*/
Прекрасно! Теперь у нас есть записи в таблице классов, и мы можем добавить данные в таблицу учеников, а также установить нужные связи (с таблицей классов).
INSERT INTO students
(name, classroom_id)
VALUES
('Adam', 1),
('Betty', 1),
('Caroline', 2);
SELECT * FROM students;
/*
id | name | classroom_id
-- | -------- | ------------
1 | Adam | 1
2 | Betty | 1
3 | Caroline | 2
*/
Но что же случится, если у нас появится новый ученик, которому ещё не назначили класс? Неужели нам придется ждать, пока станет известно в каком он классе, и только после этого добавить его запись в базу данных?
Конечно же, нет. Мы установили внешний ключ, и он будет блокировать запись, поскольку ссылка на несуществующий id класса невозможна, но мы можем в качестве идентификатора класса (classroom_id) передать null. Это можно сделать двумя способами: указанием null при записи значений, либо просто передачей только имени.
-- явно определим значение NULL
INSERT INTO students
(name, classroom_id)
VALUES
('Dina', NULL);
-- неявно определим значение NULL
INSERT INTO students
(name)
VALUES
('Evan');
SELECT * FROM students;
/*
id | name | classroom_id
-- | -------- | ------------
1 | Adam | 1
2 | Betty | 1
3 | Caroline | 2
4 | Dina | [null]
5 | Evan | [null]
*/
И наконец, давайте заполним таблицу успеваемости. Этот параметр, как правило, формируется из нескольких составляющих – домашние задания, участие в проектах, посещаемость и экзамены. Мы будем использовать две таблицы. Таблица заданий (assignments), как понятно из названия, будет содержать данные о самих заданиях, и таблица оценок (grades), в которой мы будем хранить данные о том, как ученик выполнил эти задания.
DROP TABLE IF EXISTS assignments CASCADE;
DROP TABLE IF EXISTS grades CASCADE;
CREATE TABLE assignments (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
category VARCHAR(20),
name VARCHAR(200),
due_date DATE,
weight FLOAT
);
CREATE TABLE grades (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
assignment_id INT,
score INT,
student_id INT,
CONSTRAINT fk_assignments
FOREIGN KEY(assignment_id)
REFERENCES assignments(id),
CONSTRAINT fk_students
FOREIGN KEY(student_id)
REFERENCES students(id)
);
Вместо того чтобы вставлять данные вручную, давайте загрузим их с помощью CSV-файла. Вы можете скачать файл из этого репозитория или создать его самостоятельно. Имейте в виду, чтобы разрешить pgAdmin доступ к данным, вам может понадобиться расширить права доступа к папке (в моем случае – это папка db_data).
COPY assignments(category, name, due_date, weight)
FROM 'C:/Users/mgsosna/Desktop/db_data/assignments.csv'
DELIMITER ','
CSV HEADER;
/*
COPY 5
Query returned successfully in 118 msec.
*/
COPY grades(assignment_id, score, student_id)
FROM 'C:/Users/mgsosna/Desktop/db_data/grades.csv'
DELIMITER ','
CSV HEADER;
/*
COPY 25
Query returned successfully in 64 msec.
*/
Теперь давайте проверим, что мы всё сделали верно. Напишем запрос, который покажет среднюю оценку, по каждому виду заданий с группировкой по учителям.
SELECT
c.teacher,
a.category,
ROUND(AVG(g.score), 1) AS avg_score
FROM
students AS s
INNER JOIN classrooms AS c
ON c.id = s.classroom_id
INNER JOIN grades AS g
ON s.id = g.student_id
INNER JOIN assignments AS a
ON a.id = g.assignment_id
GROUP BY
1,
2
ORDER BY
3 DESC;
/*
teacher | category | avg_score
------- | --------- | ---------
Jonah | project | 100.0
Jonah | homework | 94.0
Jonah | exam | 92.5
Mary | homework | 78.3
Mary | exam | 76.0
Mary | project | 69.5
*/
Отлично! Мы установили, настроили и наполнили базу данных.
***
Итак, в этой статье мы научились:
- создавать базу данных;
- создавать таблицы;
- наполнять таблицы данными;
- устанавливать связи между таблицами;
Теперь у нас всё готово, чтобы пробовать более сложные возможности SQL. Мы начнем с возможностей синтаксиса, которые, вероятно, вам еще не знакомы и которые откроют перед вами новые границы в написании SQL-запросов. Также мы разберем некоторый виды соединений таблиц (JOIN) и способы организации запросов в тех случаях, когда они занимают десятки или даже сотни строк.
В следующей части мы разберем:
- виды фильтраций в запросах;
- запросы с условиями типа if-else;
- новые виды соединений таблиц;
- функции для работы с массивами;
Материалы по теме
- 🐘 8 лучших GUI клиентов PostgreSQL в 2021 году
- 🐍🐬 Python и MySQL: практическое введение
- 🐍🗄️ Управление данными с помощью Python, SQLite и SQLAlchemy
В данной работе показаны начальные приемы работы с pgAdmin
Примечание 1: ЛКМ, ПКМ — левая, правая кнопка мыши
Вопросы:
01 Установка PostgreSQL и PgAdmin
02 Создание базы данных в правильной кодировке
03 Создание таблиц в pgAdmin
04 Создание столбцов
05 PgAdmin — первичный ключ в PostgreSQL
06 Создание базовых колонок
07 Код таблицы DDL в PostgreSQL
08 Поле ID Autoincrement
09 Создание Foreign key – внешний ключ
10 Взаимодействие через внешний ключ
11 pgAdmin — добавление тестовых данных вручную
01 Установка PostgreSQL и PgAdmin — https://www.postgresql.org/download/
Вместе с PostgreSQL уставливается и PgAdmin
Во время установки задаем пароль суперпользователя (мастер-пароль) базы данных.
Locale — English, United States
Проверить установку PostgreSQL можно так: в Windows находим Службы и в них
проверяем наличие службы PostgreSQL.
Служба_PostgreSQL.png

После установки PgAdmin появляется в меню
Пуск>Все программы>PostgreSQL(N)
При запуске программы нужно указать мастер-пароль, который
вы указывали при установке.
Также этот пароль понадобится при заходе в базу данных.
Проверка кодировки
Открываем Database > ПКМ на postgres > Properties > Definition
Параметр Encoding = UTF8
Важно обратить внимание на этот параметр и именно поэтому
мы выбирали локаль
Locale — English, United States
Если у вас кодировка UTF-8, то у вас будет меньше проблем
с экспортом и импортом данных.
Проверка_кодировки.png

02 Создание базы данных в правильной кодировке
Если кодировка вашей системы отличается от UTF-8:
вы все равно сможете создать свою базу c UTF-8
ПКМ На Databases > Create > Database
Во вкладке Definition можно вручную выбрать
Encoding — UTF — 8
Иногда система может потребовать использовать шаблон template0,
тогда его вы тоже можете выбрать в этой вкладке:
База_данных_в_ UTF-8.png

Также вам может потребоваться перенести все ваши таблицы
из старой базы в новую, это вы можете сделать через меню
Tools в верхней части программы — комады Backup и Restore
03 Создание таблиц в pgAdmin
На примере базы данных postgres находим Tables,
ПКМ > Create > Table
Создать_таблицу.png

Задаем название таблицы, эти названия не должны
пересекаться с ключевыми словами баз данных, иначе могут быть
неожиданности, Owner — postgres, в комментариях указываем
назначение таблицы и другую полезную информацию.
Если после создания таблица не отобразилась в списке Tables,
можно обновить данные
ПКМ на Tables > Refresh
Для примера создадим несколько таблиц:
category, priority, task, user_data
04 Создание столбцов
Создать столбцы можно двумя способами,
Кликаем на таблицу ПКМ > Properties > Columns
(можно создать сразу несколько колонок) или
Кликаем на таблицу ПКМ > Create > Column
(создаем по одной колонке)
Создать_колонки.png

Добавим следующие колонки в таблицу user_data:
почта — обязательное значение
пароль — обязательное значение
имя — обязательное значение
Колонки_для_user_data.png

После сохранения колонок можно сделать
ПКМ на таблице > Refresh
и увидеть наши колонки, развернув таблицу и подраздел
Columns.
Для редактирования колонок в дальнейшем
мы точно также делаем:
ПКМ на таблице > Properties > Columns
и в окне, где показаны все столбцы кликаем на значок
редактирования слева от нужного столбца.
05 PgAdmin — первичный ключ в PostgreSQL
В таблице user_data создаем новое поле id типа bigint
(аналог long в Java). Добавляем полю параметр Not Null и
primary key.
id_первичный_ключ.png

Когда мы накладываем ограничение Primary key
в поле id мы можем сохранять только уникальные значения.
Все остальные поля в строке могут быть одинаковыми,
важно, чтобы id был разный. Столбец с Primary key
чаще всего обозначается PK
id_разный.png

06 Создание базовых колонок
Заполните колонками таблицу task:
title — text — not null
completed — numeric — not null
task_date — timestamp without time zone
id — bigint — not null — Primary key
Увидеть результат создания можно так:
Делаем Refresh, через ПКМ на таблице > Refresh
и разворачиваваем таблицу ЛКМ до колонок
Вид_колонок.png

Заполните столбцами таблицу priority:
title — text — not null
color — text — not null
id — bigint — not null — primary key
Заполните столбцами таблицу category:
title — text — not null
id — bigint — not null — primary key
07 Код таблицы DDL в PostgreSQL
Мы создали таблицы в pgAdmin средствами самой программы,
вводя в поля нужные значения и используя переключатели.
Тоже самое можно сделать с помощью
DDL – Data Definition Language (язык описания данных)
Это так называемый SQL запрос для создания таблицы.
Мы можем посмотреть этот код (в режиме чтения), выбрав слева
нужную таблицу, а справа, соотвестствующую вкладку.
В дальнейшем вам нужно научиться создавать таблицы и тем
и другим способом
Код_создания_таблицы.png

08 Поле ID Autoincrement
Автоинкременент или автоматическая нумерация —
это автоматическое увеличение значения в колонке
(чаще всего id) средствами самой базы данных.
Это удобно и часто используется. Программист думает
о заполнении таблицы данными, а нумерацию
делает сама БД.
Давайте отредактируем настройки
наших таблиц и настроим столбец id на автонумерацию.
Автонумерация.png

Для этого как обычно:
ПКМ на названии таблицы > Properties > Columns
Слева от поля id нажимаем значок редактирования,
во вкладке Constraints выбираем Type — IDENTITY,
а Identity — ALWAYS.
После сохранения можно закрыть окно,
перейти во вкладу SQL и посмотреть как изменился
код, который задает создание столбца id.
id_автонумерация.png

Теперь он будет автоматически менять свое значение
при каждом добавлении новой строки с данными.
09 Создание Foreign key – внешний ключ
Foreign key — внешний ключ или можно сказать ссылка на другую таблицу.
Попробуем сделать ссылки из таблицы task на таблицу category и
priority. Смысл этих ссылок — это выражение в таблице,
какая категория у задачи и какой приоритет.
Создаем ключ (поле, столбец, колонку) category_id на таблицу category
и поле id через вкладку Columns и сохраняем его.
Пока поле никуда не ссылается
ПКМ на task > Properties > Columns
Создаем_category_id.png

Следующим шагом заходим в Ограничения и выбираем Внешние ключи
ПКМ на task > Properties > Constraints > Foreign Key
Вводим название Ограничения — category_fkey, далее редактируем это поле
(значок карандаша слева), вкладка Columns,
Local column — указываем нашу колонку — category_id
поле References — надо указать таблицу, на которую ссылаемся
поле Referencing — указываем колонку на которую ссылаемся
Далее нажимаем «+» на уровне Columns и Save.
Связываем_ключ_с_таблицей.png

После закрытия окна, во вкладке SQL можем наблюдать
изменения в коде создания — CONSTRAINT category_fkey.
Теперь при создании очередной строки в task мы должны указывать
только существующие id из таблицы category иначе строку создать не
получится.
10 Взаимодействие через внешний ключ
Давайте добавим внешние ключи для остальных таблиц в pgAdmin.
Начнем с колонки priority_id. Делаем все тоже самое, создаем и сохраняем
сохраняем внешний ключ, потом «привязываем» его к другой таблице.
Тоже самое делаем с таблицей user_data. В таблице task создаем
для неё ключ user_id. Этот ключ должен содержать параметр not null.
Задание должно иметь владельца, иначе оно бессмысленно.
Также это значит, что мы не можем добавить данные в таблицу task
без заполнения таблицы user.
Для таблицы task в pgAdmin должно получиться что-то такое:
task_внешние_ключи.png

В таблице category должны храниться все назначенные категории
всеми пользователями, поэтому в таблице category тоже нужно сделать
внешний ключ на таблицу пользователей. Таблицу priority
связываем с таблицей user_data аналогичным способом.
11 PgAdmin — добавление тестовых данных вручную
После выстраивания всей системы базы данных бывает полезно проверить
правильность настроек добавлением некторого количества тестовых данных.
Для этого сначала заполняем данными таблицу user_data,
т.к. от неё зависят все остальные. Для этого:
заполнение_данными.png

ПКМ на user_data > View/Edit Data > All Rows
и заполняем ячейки вручную в правой нижней части окна
согласно ограничениям, которые мы вписали для этой таблицы
(например id не заполняем, он заполняется автоматически).
После внесения нескольких тестовых пользователей,
их данные можно использовать в других таблицах.
После user_id мы заполняем несколько значений в category и
priority, а потом на основании этих трех таблиц мы можем
сделать несколько тестовых строк в task
в pgAdmin У нас есть возможность каскадно удалять данные.
Если мы хотим удалить в user_data всех пользователей
и удалить все данные в остальных таблицах, которые ссылаются
на эту таблицу мы можем сделать так:
ПКМ на user_data > Truncate > Truncate Cascade
Примечание 2: Спасибо вам за проявленный интерес к данной работе
Вы можете форкнуть данную работу и дополнить или исправить
что-то по своему усмотрению (переделать под себя).
Установка
Когда вы изучаете новый язык, самым важным аспектом является практика. Одно дело – прочитать статью и совсем другое – применить полученную информацию. Давайте начнем с установки базы данных на компьютер.
Первый шаг – установить SQL
Мы будем использовать PostgreSQL (Postgres) – достаточно распространенный SQL диалект. Для этого откроем страницу загрузки, выберем операционную систему (в моем случае Windows), и запустим установку. Если вы установите пароль для вашей базы данных, постарайтесь сразу не забыть его, он нам дальше понадобится. Поскольку наша база будет локальной, можете использовать простой пароль, например: admin.
Следующий шаг – установка pgAdmin
pgAdmin – это графический интерфейс пользователя (GUI – graphical user interface), который упрощает взаимодействие с базой данных PostgreSQL. Перейдите на страницу загрузки, выберите вашу операционную систему и следуйте указаниям (в статье используется Postgres 14 и pgAdmin 4 v6.3.).
После установки обоих компонентов открываем pgAdmin и нажимаем Add new server. На этом шаге установится соединение с существующим сервером, именно поэтому необходимо сначала установить Postgres. Я назвал свой сервер home и использовал пароль, указанный при установке.
Теперь всё готово к созданию таблиц. Давайте создадим набор таблиц, которые моделируют школу. Нам необходимы таблицы: ученики, классы, оценки. При создании модели данных необходимо учитывать, что в одном классе может быть много учеников, а у ученика может быть много оценок (такое отношение называется «один ко многим»).
Мы можем создать таблицы напрямую в pgAdmin, но вместо этого мы напишем код, который можно будет использовать в дальнейшем, например, для пересоздания таблиц. Для создания запроса, который создаст наши таблицы, нажимаем правой кнопкой мыши на postgres (пункт расположен в меню слева home → Databases (1) → postgres и далее выбираем Query Tool.
Начнем с создания таблицы классов (classrooms). Таблица будет простой: она будет содержать идентификатор id и имя учителя – teacher. Напишите следующий код в окне запроса (query tool) и запустите (run или F5).
DROP TABLE IF EXISTS classrooms CASCADE;
CREATE TABLE classrooms (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
teacher VARCHAR(100)
);
В первой строке фрагмент DROP TABLE IF EXISTS classrooms удалит таблицу classrooms, если она уже существует. Важно учитывать, что Postgres, не позволит нам удалить таблицу, если она имеет связи с другими таблицами, поэтому, чтобы обойти это ограничение (constraint) в конце строки добавлен оператор CASCADE. CASCADE – автоматически удалит или изменит строки из зависимой таблицы, при внесении изменений в главную. В нашем случае нет ничего страшного в удалении таблицы, поскольку, если мы на это пошли, значит мы будем пересоздавать всё с нуля, и остальные таблицы тоже удалятся.
Добавление DROP TABLE IF EXISTS перед CREATE TABLE позволит нам систематизировать схему нашей базы данных и создать скрипты, которые будут очень удобны, если мы захотим внести изменения – например, добавить таблицу, изменить тип данных поля и т. д. Для этого нам просто нужно будет внести изменения в уже готовый скрипт и перезапустить его.
Ничего нам не мешает добавить наш код в систему контроля версий. Весь код для создания базы данных из этой статьи вы можете посмотреть по ссылке.
Также вы могли обратить внимание на четвертую строчку. Здесь мы определили, что колонка id является первичным ключом (primary key), что означает следующее: в каждой записи в таблице это поле должно быть заполнено и каждое значение должно быть уникальным. Чтобы не пришлось постоянно держать в голове, какое значение id уже было использовано, а какое – нет, мы написали GENERATED ALWAYS AS IDENTITY, этот приём является альтернативой синтаксису последовательности (CREATE SEQUENCE). В результате при добавлении записей в эту таблицу нам нужно будет просто добавить имя учителя.
И в пятой строке мы определили, что поле teacher имеет тип данных VARCHAR (строка) с максимальной длиной 100 символов. Если в будущем нам понадобится добавить в таблицу учителя с более длинным именем, нам придется либо использовать инициалы, либо изменять таблицу (alter table).
Теперь давайте создадим таблицу учеников (students). Новая таблица будет содержать: уникальный идентификатор (id), имя ученика (name), и внешний ключ (foreign key), который будет указывать (references) на таблицу классов.
DROP TABLE IF EXISTS students CASCADE;
CREATE TABLE students (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name VARCHAR(100),
classroom_id INT,
CONSTRAINT fk_classrooms
FOREIGN KEY(classroom_id)
REFERENCES classrooms(id)
);
И снова мы перед созданием новой таблицы удаляем старую, если она существует, добавляем поле id, которое автоматически увеличивает своё значение и имя с типом данных VARCHAR (строка) и максимальной длиной 100 символов. Также в эту таблицу мы добавили колонку с идентификатором класса (classroom_id), и с седьмой по девятую строку установили, что ее значение указывает на колонку id в таблице классов (classrooms).
Мы определили, что classroom_id является внешним ключом. Это означает, что мы задали правила, по которым данные будут записываться в таблицу учеников (students). То есть Postgres на данном этапе не позволит нам вставить строку с данными в таблицу учеников (students), в которой указан идентификатор класса (classroom_id), не существующий в таблице classrooms. Например: у нас в таблице классов 10 записей (id с 1 до 10), система не даст нам вставить данные в таблицу учеников, у которых указан идентификатор класса 11 и больше.
INSERT INTO students
(name, classroom_id)
VALUES
('Matt', 1);
/*
ERROR: insert or update on table "students" violates foreign
key constraint "fk_classrooms"
DETAIL: Key (classroom_id)=(1) is not present in table
"classrooms".
SQL state: 23503
*/
Теперь давайте добавим немного данных в таблицу классов (classrooms). Так как мы определили, что значение в поле id будет увеличиваться автоматически, нам нужно только добавить имена учителей.
INSERT INTO classrooms
(teacher)
VALUES
('Mary'),
('Jonah');
SELECT * FROM classrooms;
/*
id | teacher
-- | -------
1 | Mary
2 | Jonah
*/
Прекрасно! Теперь у нас есть записи в таблице классов, и мы можем добавить данные в таблицу учеников, а также установить нужные связи (с таблицей классов).
INSERT INTO students
(name, classroom_id)
VALUES
('Adam', 1),
('Betty', 1),
('Caroline', 2);
SELECT * FROM students;
/*
id | name | classroom_id
-- | -------- | ------------
1 | Adam | 1
2 | Betty | 1
3 | Caroline | 2
*/
Но что же случится, если у нас появится новый ученик, которому ещё не назначили класс? Неужели нам придется ждать, пока станет известно в каком он классе, и только после этого добавить его запись в базу данных?
Конечно же, нет. Мы установили внешний ключ, и он будет блокировать запись, поскольку ссылка на несуществующий id класса невозможна, но мы можем в качестве идентификатора класса (classroom_id) передать null. Это можно сделать двумя способами: указанием null при записи значений, либо просто передачей только имени.
-- явно определим значение NULL
INSERT INTO students
(name, classroom_id)
VALUES
('Dina', NULL);
-- неявно определим значение NULL
INSERT INTO students
(name)
VALUES
('Evan');
SELECT * FROM students;
/*
id | name | classroom_id
-- | -------- | ------------
1 | Adam | 1
2 | Betty | 1
3 | Caroline | 2
4 | Dina | [null]
5 | Evan | [null]
*/
И наконец, давайте заполним таблицу успеваемости. Этот параметр, как правило, формируется из нескольких составляющих – домашние задания, участие в проектах, посещаемость и экзамены. Мы будем использовать две таблицы. Таблица заданий (assignments), как понятно из названия, будет содержать данные о самих заданиях, и таблица оценок (grades), в которой мы будем хранить данные о том, как ученик выполнил эти задания.
DROP TABLE IF EXISTS assignments CASCADE;
DROP TABLE IF EXISTS grades CASCADE;
CREATE TABLE assignments (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
category VARCHAR(20),
name VARCHAR(200),
due_date DATE,
weight FLOAT
);
CREATE TABLE grades (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
assignment_id INT,
score INT,
student_id INT,
CONSTRAINT fk_assignments
FOREIGN KEY(assignment_id)
REFERENCES assignments(id),
CONSTRAINT fk_students
FOREIGN KEY(student_id)
REFERENCES students(id)
);
Вместо того чтобы вставлять данные вручную, давайте загрузим их с помощью CSV-файла. Вы можете скачать файл из этого репозитория или создать его самостоятельно. Имейте в виду, чтобы разрешить pgAdmin доступ к данным, вам может понадобиться расширить права доступа к папке (в моем случае – это папка db_data).
COPY assignments(category, name, due_date, weight)
FROM 'C:/Users/mgsosna/Desktop/db_data/assignments.csv'
DELIMITER ','
CSV HEADER;
/*
COPY 5
Query returned successfully in 118 msec.
*/
COPY grades(assignment_id, score, student_id)
FROM 'C:/Users/mgsosna/Desktop/db_data/grades.csv'
DELIMITER ','
CSV HEADER;
/*
COPY 25
Query returned successfully in 64 msec.
*/
Теперь давайте проверим, что мы всё сделали верно. Напишем запрос, который покажет среднюю оценку, по каждому виду заданий с группировкой по учителям.
SELECT
c.teacher,
a.category,
ROUND(AVG(g.score), 1) AS avg_score
FROM
students AS s
INNER JOIN classrooms AS c
ON c.id = s.classroom_id
INNER JOIN grades AS g
ON s.id = g.student_id
INNER JOIN assignments AS a
ON a.id = g.assignment_id
GROUP BY
1,
2
ORDER BY
3 DESC;
/*
teacher | category | avg_score
------- | --------- | ---------
Jonah | project | 100.0
Jonah | homework | 94.0
Jonah | exam | 92.5
Mary | homework | 78.3
Mary | exam | 76.0
Mary | project | 69.5
*/
Отлично! Мы установили, настроили и наполнили базу данных.
***
Итак, в этой статье мы научились:
- создавать базу данных;
- создавать таблицы;
- наполнять таблицы данными;
- устанавливать связи между таблицами;
Теперь у нас всё готово, чтобы пробовать более сложные возможности SQL. Мы начнем с возможностей синтаксиса, которые, вероятно, вам еще не знакомы и которые откроют перед вами новые границы в написании SQL-запросов. Также мы разберем некоторый виды соединений таблиц (JOIN) и способы организации запросов в тех случаях, когда они занимают десятки или даже сотни строк.
В следующей части мы разберем:
- виды фильтраций в запросах;
- запросы с условиями типа if-else;
- новые виды соединений таблиц;
- функции для работы с массивами;
Материалы по теме
- 🐘 8 лучших GUI клиентов PostgreSQL в 2021 году
- 🐍🐬 Python и MySQL: практическое введение
- 🐍🗄️ Управление данными с помощью Python, SQLite и SQLAlchemy
Инструкция по установке PostgreSQL и созданию демонстрационной базы данных для самостоятельного запуска запросов из курса
Если вы хотите не просто смотреть видео курса «Основы SQL», но и самостоятельно экспериментировать с SQL запросами и видеть результаты их выполнения на живой базе данных, то можете установить бесплатную систему управления базами данных PostgreSQL и создать в ней демонстрационную базу с данными, которые показаны в видео. Эта статья содержит подробные инструкции по установке и настройке.
Установка PostgreSQL
В учебном курсе «Основы SQL» для демонстрации работы SQL используется PostgreSQL. Сейчас это самая популярная из бесплатных систем управления базами данных. Все SQL запросы в курсе проверены на работоспособность именно в PostgreSQL. Однако большая часть запросов использует синтаксис стандарта ANSI SQL, поэтому они будут работать и в других системах, включая MySQL, Microsoft SQL Server и Oracle. Вы можете использовать любую систему управления базами данных, которая вам нравится, но я рекомендую PostgreSQL.
1. Загрузите PostgreSQL для вашей операционной системы на странице Downloads официального сайта. Я устанавливал на Windows, если вы используете другую операционную систему, то выбирайте соответствующие ссылки для загрузки. Примеры в курсе проверены на PostgreSQL 13, поэтому рекомендую устанавливать именно эту версию. Однако на предыдущих версиях, начиная с PosgreSQL 10, также все должно работать.
Инсталлятор для Windows и Mac OS загружается с сайта компании EDB, которая предоставляет платную поддержку для PostgreSQL. Однако PostgreSQL, которую вы установите с помощью этого инсталлятора от EDB, будет полностью бесплатной.
2. Запустите скачанный инсталлятор PostgreSQL.

Если вы устанавливаете PostgreSQL только для использования в курсе «Основы SQL», то можете оставить почти все настройки по умолчанию, кроме локали, для которой нужно выбрать «Russian, Russia» (русский язык в стране Россия).

Не забудьте запомнить или записать пароль пользователя postgres, он вам понадобится для подключения к базе и выполнения запросов!
После завершения установки инсталлятор предложит вам запустить Stack Builder для установки дополнительных утилит и компонентов. Этого можно не делать, просто снимите галочку в пункте «Stack Builder…» и нажмите кнопку «Finish».

На этом установка PostrgreSQL завершена.
Запуск и настройка pgAdmin
В курсе мы будем работать с PostrgreSQL через Web-интерфейс pgAdmin. Несмотря на Admin в названии, этот инструмент подходит не только администраторам, но и разработчикам.
pgAdmin устанавливается вместе с PostgreSQL. В Windows запустить pgAdmin можно в меню Пуск.

При первом запуске pgAdmin просит задать Master Password. Он будет использоваться для безопасного сохранения паролей к базам данных PosgreSQL, с которыми вы работаете через pgAdmin. Master Password можно выбрать любой, главное, запомните или запишите его.

Для удобства можно переключить интерфейс pgAdmin на русский язык. Для этого выберите меню File->Preferences, в появившемся окне в меню слева выберите Miscellaneous -> User Language, а затем в поле User Language справа «Russian».

Для вступления в силу настроек языка интерфейса нужно нажать кнопку «Save» и перезапустить pgAdmin.
После перезапуска выбирайте в левом меню Servers -> PostgreSQL, после чего pgAdmin запросит пароль пользователя postgres, который вы задали в процессе установки PostgreSQL. Введите этот пароль (можете поставить галочку «Save Password» чтобы pgAdmin запомнил пароль) и вы подключитесь к базе PostgreSQL.

Список существующих на сервере баз данных показывается в левом окне pgAdmin. Нас интересует база данных postgres, схема public и таблицы в ней. pgAdmin показывает много другой информации, не пугайтесь, если вы пока не понимаете, что это такое. Многое мы разберем в курсе, но преимущественно все это нужно только администраторам базы данных.

Пока в нашей базе нет никаких таблиц. Давайте создадим демонстрационные таблицы, которые используются в курсе, и заполним их данными.
Создание демонстрационной базы
1. Скачайте файл с демонстрационной базой данных курса «Основы SQL». Файл называется «sql_foundation» и имеет расширение .sql.
Файл содержит набор операторов SQL, которые создают используемые в курсе таблицы и заполняют их данными. Если вы пока не понимаете, что именно делают эти операторы, не расстраивайтесь. В курсе мы подробно рассмотрим работу каждого оператора и все будет понятно. На начальном этапе изучения курса необходимо просто запустить этот файл в pgAdmin.
2. Загрузите скачанный файл в pgAdmin. Для этого в меню pgAdmin выберите Инструменты->Запросник (в английском вариант Query Tool). В панели инструментов Запросника выберите кнопку открытия файла и в появившемся окне выберите путь к загруженному sql файлу с демонстрационной базой курса.

3. Запустите загруженный файл в pgAgmin. Для этого нажмите на кнопку запуска в панели инструментов Запросника или на клавишу F5.

4. Проверьте правильность выполнения запроса. В нижней части экрана pgAdmin, на закладке «Сообщения» должны появиться результаты выполнения.

Основное, на что нужно обратить внимание — это сообщение «Запрос завершен успешно». Если такое сообщение появилось, значит все хорошо.
Если вы запускаете файл создания демонстрационной базы курса первый раз, то будет выведено несколько Замечаний, что таблицы не существуют. Их можно игнорировать.
Также в левой части интерфейса pgAdmin появится информация о созданных таблицах.

Итак, демонстрационные таблицы для курса «Основы SQL» созданы и заполнены данными, можно запускать SQL запросы.
Запуск SQL запросов в pgAdmin
В pgAdmin для запуска SQL запросов используется уже знакомый нам инструмент Запросник. Давайте откроем окно Запросника и напишем самый первый SQL запрос из видео про Оператор SELECT.
Запрос пишется в среднем окне, закладка Query Editor. Для запуска запроса нажимаем F5 или кнопку Execute в панели инструментов Запросника.
Полученные в ходе выполнения запроса данные показываются в нижней части окна, на закладке «Результат».

Использование SQL Shell (psql)
Если вы предпочитаете работать в командной строке, а не в громоздких приложениях типа pgAdmin, то можете использовать консольную утилиту для работы с PosgreSQL: SQL Shell (ранее она называлась psql).
SQL Shell, также как и pgAdmin, устанавливается совместно с PostgreSQL. В Windows запустить SQL Shell можно через меню Пуск.

После запуска SQL Shell задаст ряд вопросов о параметрах подключения к PostgreSQL, можно оставить все значения по умолчанию (если вы не меняли настройки при установке). После этого введите пароль пользователя postgres и можете начинать работать с базой данных.

Если вам не повезло, то в Windows SQL Shell запустится с неправильной кодировкой для русского языка, будет выдавать предупреждение и некоторые русские буквы будут выводиться неправильно.

Чтобы решить эту проблему, нужно прописать правильную кодировку в файл для запуска SQL Shell. В моем случае файл называется «C:Program FilesPostgreSQL13scriptsrunpsql.bat». В этот файл нужно добавить строку:
chcp 1251
После добавления строки с установкой правильной кодировки файл runpsql. bat стал выглядеть следующим образом.

Сохраняем файл runpsql. bat, перезапускаем SQL Shell, после этого проблем с русской кодировкой быть не должно.
Для создания демонстрационной базы курса в SQL Shell выполните следующую команду:
i 'C:/путь/к/файлу/sql_foundation.sql'
i означает import — загрузка файла sql в базу данных.
Обратите, пожалуйста, внимание:
1. Путь к файлу sql_foundation.sql нужно указывать в одиночных кавычках. Если будете использовать двойные кавычки, то не заработает.
2. В пути используются прямые слеши (/), как в Linux/Unix, несмотря на то, что мы работаем под Windows. Если писать обратные слеши (), как это принято в Windows, то будет выдаваться ошибка «Permission denied». Не очень информативное поведение SQL Shel.
Запросы в SQL Shell можно писать прямо в командной строке.

Запрос в SQL Shell может занимать несколько строк, как в примере на рисунке. Запрос запускается после ввода ; (точка с запятой) или команды g.
Результаты выполнения запроса показываются сразу же после него.
Полезная функция SQL Shell — история команд. Если нажимать стрелки вверх или вниз, то можно увидеть, какие команды были запущены ранее и повторить интересующую вас команду.
Итоги
В этой статье вы узнали, как установить PostgreSQL и как создать в нем демонстрационную базу для курса «Основы SQL». Также вы настроили и научились использовать два инструмента работы с PostgreSQL: pgAdmin и SQL Shell. Не обязательно использовать оба, выбирайте тот, который вам больше нравится: pgAdmin с Web-интерфейсом или командную строку SQL Shell.
В процессе экспериментов с SQL запросами в курсе вы можете случайно повредить созданную базу. В этом нет ничего страшного, базу данных можно легко пересоздать повторно запустив sql файл с операторами по созданию базы. При этом все имеющиеся таблицы будут удалены, заново созданы и заполнены данными. Все изменения, которые вы вносили, будут потеряны.
Полезные ссылки
|
Рубрика: Базы данных / Оптимизация |
Мой мир Вконтакте Одноклассники Google+ |

PostgreSQL: графический клиент pgAdmin
В предыдущей статье, посвященной СУБД PostgreSQL (см. июльский номер журнала), упоминался графический клиент pgAdmin. В этой статье рассмотрим его основные функции и возможности.
Для тестирования с сайта www.pgadmin.org был скачан пакет pgAdmin III версии 1.0.2 для Windows 2000/XP (в виде msi-архива). Размер дистрибутива составляет менее 5,5 Мб. Установка пакета на операционную систему Windows XP Professional затруднений не вызвала. После традиционного вопроса о согласии с условиями лицензионного соглашения (пакет распространяется бесплатно) и нескольких секунд инсталляционных процедур программа была готова к работе.
При первом запуске было предложено выбрать предпочитаемый язык интерфейса. Среди нескольких десятков поддерживаемых языков отыскался и русский.
Открывшееся далее главное окно (рис. 1) своими очертаниями вызвало в памяти образ входящего в состав СУБД Oracle клиента PL/SQL Developer. Правда, некоторый аскетизм панели инструментов навевал мысль, что в функциональном плане различия будут более заметны, и никак не в пользу pgAdmin.
Рисунок 1
СУБД PostgreSQL версии 7.4.1 у меня была запущена на другой машине (под управлением FreeBSD), что и было указано при добавлении сервера (рис. 2). Поясню отсутствие пароля: моя рабочая машина прописана в файле pg_hba.conf (файл настройки доступа PostgreSQL) как доверенный хост, что позволяет соединяться с сервером БД, как мне заблагорассудится. Своя рука – владыка. Естественно, на рабочем сервере такая халатность не приветствуется.
Рисунок 2
Теперь слева будет дерево баз данных, справа отображается информация по выделенному объекту и ниже – SQL-команда, с помощью которой выделенный объект мог быть создан (рис. 3).
Рисунок 3
Для общего представления создадим новую таблицу. Для чего давим правую кнопку мыши над веткой «Таблицы», выбираем «Новый объект» – «Новая таблица» и начинаем вводить ее свойства (рис. 4).
Рисунок 4
Далее, на вкладке «Колонки» собираем (другое определение к этому процессу подобрать трудно) структуру таблицы, последовательно добавляя поля (рис. 5). Для каждого поля должно быть задано имя и тип данных. Дополнительно можно указать значение по умолчанию и/или отметить поле как «NOT NULL», запретив тем самым оставлять его без определенного значения.
Рисунок 5
На следующей вкладке можно задать ограничения (первичный и вторичный ключи, UNIQUE и CHECK).
Вкладка «Безопасность» позволяет раздать другим пользователям права доступа к создаваемой таблице.
Последняя закладка – «SQL» – позволяет посмотреть, каким SQL-запросом все это будет создано.
Огорчила невозможность исправить ошибку на стадии создания таблицы. Например, если вы неправильно задали тип данных для поля, то исправить это можно, только удалив поле и создав новое. В дальнейшем, если вернуться к свойствам уже созданной таблицы, кнопка «Изменить» присутствует, а вот во время создания новой – нет… А для ограничений нет даже этого – только удалять и создавать заново.
Еще один недостаток – об ошибке узнаешь только при попытке сохранить сделанные изменения.
Как уже было вскользь замечено, существующие таблицы можно изменять. Да и было бы странно, если бы такая возможность отсутствовала. Интерфейс тот же самый (за исключением упомянутой выше кнопки «Изменить»). На вкладке «SQL» будет формироваться код, который необходимо выполнить для осуществления желаемых изменений.
Код формируется, как и следовало ожидать, довольно просто, без «хитринки». Например, если дать указание при создании таблицы задать владельца, то в код будет просто добавлена команда «ALTER TABLE … OWNER …» после того, как таблица будет создана командой «CREATE TABLE …». Хотя по-хорошему это можно сделать одной командой.
Для работы с наполнением таблиц служит инструмент «Просмотр данных» (рис. 6). Выполненный в стиле «старого доброго» MS Access, он позволяет просматривать содержимое таблицы, добавлять новые строки, изменять и удалять существующие. Причем изменение данных возможно только в случае, если таблица создана с установленным флагом «Имеет OID». Как ни странно это выглядит, но в обоих случаях инструмент называется именно «Просмотр данных» (в англоязычном варианте «View Data»), несмотря на возможность редактирования, хотя заголовок окна гласит «pgAdmin III Edit data», и тоже в обоих случаях. Таким образом, этот недочет, допущенный при проектировании интерфейса, способен ввести в заблуждение, и сразу отыскать возможность работы с данными таблиц довольно трудно.
Рисунок 6
Более широкие возможности по работе с запросами предоставляет «Инструмент запросов» (рис. 7). Тут уже есть куда ввести любой SQL-запрос и посмотреть его результат. Закладка «Сообщения» внизу окна позволяет ознакомиться с такой информацией, как количество выбранных запросом записей и время выполнения запроса. Весьма полезная функция – «Объяснить запрос» (рис. 8), выводящая последовательность действий, которые будет выполнять PostgreSQL, обрабатывая данный запрос, с расчетом времени, затрачиваемого на каждую операцию – незаменимый инструмент для оптимизации запросов. В пункте меню «Запрос» – «Опции режима объяснения» можно включить и подробный разбор каждого запроса.
Рисунок 7
Рисунок 8
Функция обслуживания БД позволяет выполнить дефрагментацию и анализ структуры базы данных либо отдельных таблиц. Регулярная дефрагментация нужна для повышения скорости доступа к данным, а анализ поставляет служебную информацию оптимизатору СУБД, на основании которой последний способен обрабатывать запросы более эффективно.
Ну и наконец, в окне «Опции» вы можете произвести некоторые настройки интерфейса, такие как выбор языка и шрифта, по своему вкусу, а также настроить log-файл.
Включение опции «Показать» – «Системные объекты» приведет к отображению баз template0 и template1, а также в каждой пользовательской БД, помимо схемы public, хранящей пользовательские данные, будут видны и служебные схемы: information schema, pg_catalog, pg_temp_1, pg_toast (рис. 9). Естественно, что для работы с системными объектами нужно обладать соответствующими правами.
Рисунок 9
Трудно сказать, недостаток это или особенность реализации, но pgAdmin жестко привязывает имя пользователя к конкретному серверу. То есть при необходимости подсоединиться к БД с другими правами приходится создавать несколько «серверов», указывающих на одну СУБД, но с разными пользователями (рис. 10). Хотя в этом есть и определенные преимущества, т.к. можно поддерживать одновременно несколько подключений с различными правами. К слову, посмотреть все подключения к СУБД можно, выбрав «Сервис» – «Состояние сервера».
Рисунок 10
В заключение заметим, что в клиенте доступен файл помощи. Правда, он на английском языке, но тем не менее достаточно подробно, просто и с обилием иллюстраций описывает работу с клиентом, его настройку, а также содержит подробную справку по PostgreSQL 7.4. Показалось несколько неудобным, что развернутое окно помощи всегда находится поверх рабочего окна, закрывая часть данных. Хотя всегда можно открыть справку отдельно (соответствующий пункт присутствует в группе «pgAdmin III» меню «Пуск»), и тогда ничто не будет мешать переключаться между окнами любимой комбинацией .
Итак, мои общие впечатления – клиент добротный, не считая мелких недостатков; поддерживает практически все функции разработки и администрирования. Широкие возможности по анализу запросов, наглядное представление структуры БД и ее составляющих, интуитивно понятный, не обремененный ничем лишним, да еще и русскоязычный интерфейс делают pgAdmin удобным инструментом для работы с базами PostgreSQL, особенно для начинающих. Помимо версии для Windows, есть пакеты для Linux (Debian, RPM, Slackware packages), для FreeBSD. При желании пакет может быть собран и из исходных текстов.
Дополнительную информацию (в том числе и на русском языке) можно получить на сайте проекта.
Мой мир
Вконтакте
Одноклассники
Google+
Последнее обновление: 23.11.2022
Для упрощения администрирования на сервере postgresql в базовый комплект установки входит такой инструмент как pgAdmin.
Он представляет графический клиент для работы с сервером, через который мы в удобном виде можем создавать, удалять, изменять базы данных и управлять ими.
Так, на Windows после установки мы можем найти значок pgAdmin в меню Пуск и запустить его:
После этого нам откроется следующая программа pgAdmin. При открытии также отображится окно для ввода пароля для подключения к серверу Postgres:
Здесь необходимо ввести пароль для суперпользователя postgres, который был задан при установке PostgreSQL.
После успешного логина нам откроется содержимое сервера:
В частности, в узле Databases мы можем увидеть все имеющиеся базы данных. По умолчанию здесь есть только одна база данных — postgres.
Также в правой части мы можем увидеть узел Login/Group Roles, который предназначен для управления пользователями и их ролями.
И третий узел — Tablespaces позволяет управлять местом хранения файлов баз данных.
Теперь создадим свою базу данных. Для этого нажмем правой кнопкой мыши на узел Databases. И далее в контекстном меню
выберем Create->Database…
После этого нам отобразится окно для создания базы данных. Введем название для БД, например, test1 и нажмем на кнопку
«Save»:
После этого в древовидном меню слева отобразится содержимое созданной базы данных test1:
Инструкция по установке PostgreSQL и созданию демонстрационной базы данных для самостоятельного запуска запросов из курса
Если вы хотите не просто смотреть видео курса «Основы SQL», но и самостоятельно экспериментировать с SQL запросами и видеть результаты их выполнения на живой базе данных, то можете установить бесплатную систему управления базами данных PostgreSQL и создать в ней демонстрационную базу с данными, которые показаны в видео. Эта статья содержит подробные инструкции по установке и настройке.
Установка PostgreSQL
В учебном курсе «Основы SQL» для демонстрации работы SQL используется PostgreSQL. Сейчас это самая популярная из бесплатных систем управления базами данных. Все SQL запросы в курсе проверены на работоспособность именно в PostgreSQL. Однако большая часть запросов использует синтаксис стандарта ANSI SQL, поэтому они будут работать и в других системах, включая MySQL, Microsoft SQL Server и Oracle. Вы можете использовать любую систему управления базами данных, которая вам нравится, но я рекомендую PostgreSQL.
1. Загрузите PostgreSQL для вашей операционной системы на странице Downloads официального сайта. Я устанавливал на Windows, если вы используете другую операционную систему, то выбирайте соответствующие ссылки для загрузки. Примеры в курсе проверены на PostgreSQL 13, поэтому рекомендую устанавливать именно эту версию. Однако на предыдущих версиях, начиная с PosgreSQL 10, также все должно работать.
Инсталлятор для Windows и Mac OS загружается с сайта компании EDB, которая предоставляет платную поддержку для PostgreSQL. Однако PostgreSQL, которую вы установите с помощью этого инсталлятора от EDB, будет полностью бесплатной.
2. Запустите скачанный инсталлятор PostgreSQL.

Если вы устанавливаете PostgreSQL только для использования в курсе «Основы SQL», то можете оставить почти все настройки по умолчанию, кроме локали, для которой нужно выбрать «Russian, Russia» (русский язык в стране Россия).

Не забудьте запомнить или записать пароль пользователя postgres, он вам понадобится для подключения к базе и выполнения запросов!
После завершения установки инсталлятор предложит вам запустить Stack Builder для установки дополнительных утилит и компонентов. Этого можно не делать, просто снимите галочку в пункте «Stack Builder…» и нажмите кнопку «Finish».

На этом установка PostrgreSQL завершена.
Запуск и настройка pgAdmin
В курсе мы будем работать с PostrgreSQL через Web-интерфейс pgAdmin. Несмотря на Admin в названии, этот инструмент подходит не только администраторам, но и разработчикам.
pgAdmin устанавливается вместе с PostgreSQL. В Windows запустить pgAdmin можно в меню Пуск.

При первом запуске pgAdmin просит задать Master Password. Он будет использоваться для безопасного сохранения паролей к базам данных PosgreSQL, с которыми вы работаете через pgAdmin. Master Password можно выбрать любой, главное, запомните или запишите его.

Для удобства можно переключить интерфейс pgAdmin на русский язык. Для этого выберите меню File->Preferences, в появившемся окне в меню слева выберите Miscellaneous -> User Language, а затем в поле User Language справа «Russian».

Для вступления в силу настроек языка интерфейса нужно нажать кнопку «Save» и перезапустить pgAdmin.
После перезапуска выбирайте в левом меню Servers -> PostgreSQL, после чего pgAdmin запросит пароль пользователя postgres, который вы задали в процессе установки PostgreSQL. Введите этот пароль (можете поставить галочку «Save Password» чтобы pgAdmin запомнил пароль) и вы подключитесь к базе PostgreSQL.

Список существующих на сервере баз данных показывается в левом окне pgAdmin. Нас интересует база данных postgres, схема public и таблицы в ней. pgAdmin показывает много другой информации, не пугайтесь, если вы пока не понимаете, что это такое. Многое мы разберем в курсе, но преимущественно все это нужно только администраторам базы данных.

Пока в нашей базе нет никаких таблиц. Давайте создадим демонстрационные таблицы, которые используются в курсе, и заполним их данными.
Создание демонстрационной базы
1. Скачайте файл с демонстрационной базой данных курса «Основы SQL». Файл называется «sql_foundation» и имеет расширение .sql.
Файл содержит набор операторов SQL, которые создают используемые в курсе таблицы и заполняют их данными. Если вы пока не понимаете, что именно делают эти операторы, не расстраивайтесь. В курсе мы подробно рассмотрим работу каждого оператора и все будет понятно. На начальном этапе изучения курса необходимо просто запустить этот файл в pgAdmin.
2. Загрузите скачанный файл в pgAdmin. Для этого в меню pgAdmin выберите Инструменты->Запросник (в английском вариант Query Tool). В панели инструментов Запросника выберите кнопку открытия файла и в появившемся окне выберите путь к загруженному sql файлу с демонстрационной базой курса.

3. Запустите загруженный файл в pgAgmin. Для этого нажмите на кнопку запуска в панели инструментов Запросника или на клавишу F5.

4. Проверьте правильность выполнения запроса. В нижней части экрана pgAdmin, на закладке «Сообщения» должны появиться результаты выполнения.

Основное, на что нужно обратить внимание — это сообщение «Запрос завершен успешно». Если такое сообщение появилось, значит все хорошо.
Если вы запускаете файл создания демонстрационной базы курса первый раз, то будет выведено несколько Замечаний, что таблицы не существуют. Их можно игнорировать.
Также в левой части интерфейса pgAdmin появится информация о созданных таблицах.

Итак, демонстрационные таблицы для курса «Основы SQL» созданы и заполнены данными, можно запускать SQL запросы.
Запуск SQL запросов в pgAdmin
В pgAdmin для запуска SQL запросов используется уже знакомый нам инструмент Запросник. Давайте откроем окно Запросника и напишем самый первый SQL запрос из видео про Оператор SELECT.
Запрос пишется в среднем окне, закладка Query Editor. Для запуска запроса нажимаем F5 или кнопку Execute в панели инструментов Запросника.
Полученные в ходе выполнения запроса данные показываются в нижней части окна, на закладке «Результат».

Использование SQL Shell (psql)
Если вы предпочитаете работать в командной строке, а не в громоздких приложениях типа pgAdmin, то можете использовать консольную утилиту для работы с PosgreSQL: SQL Shell (ранее она называлась psql).
SQL Shell, также как и pgAdmin, устанавливается совместно с PostgreSQL. В Windows запустить SQL Shell можно через меню Пуск.

После запуска SQL Shell задаст ряд вопросов о параметрах подключения к PostgreSQL, можно оставить все значения по умолчанию (если вы не меняли настройки при установке). После этого введите пароль пользователя postgres и можете начинать работать с базой данных.

Если вам не повезло, то в Windows SQL Shell запустится с неправильной кодировкой для русского языка, будет выдавать предупреждение и некоторые русские буквы будут выводиться неправильно.

Чтобы решить эту проблему, нужно прописать правильную кодировку в файл для запуска SQL Shell. В моем случае файл называется «C:\Program Files\PostgreSQL\13\scripts\runpsql.bat». В этот файл нужно добавить строку:
chcp 1251
После добавления строки с установкой правильной кодировки файл runpsql. bat стал выглядеть следующим образом.

Сохраняем файл runpsql. bat, перезапускаем SQL Shell, после этого проблем с русской кодировкой быть не должно.
Для создания демонстрационной базы курса в SQL Shell выполните следующую команду:
\i 'C:/путь/к/файлу/sql_foundation.sql'
\i означает import — загрузка файла sql в базу данных.
Обратите, пожалуйста, внимание:
1. Путь к файлу sql_foundation.sql нужно указывать в одиночных кавычках. Если будете использовать двойные кавычки, то не заработает.
2. В пути используются прямые слеши (/), как в Linux/Unix, несмотря на то, что мы работаем под Windows. Если писать обратные слеши (\), как это принято в Windows, то будет выдаваться ошибка «Permission denied». Не очень информативное поведение SQL Shel.
Запросы в SQL Shell можно писать прямо в командной строке.

Запрос в SQL Shell может занимать несколько строк, как в примере на рисунке. Запрос запускается после ввода ; (точка с запятой) или команды \g.
Результаты выполнения запроса показываются сразу же после него.
Полезная функция SQL Shell — история команд. Если нажимать стрелки вверх или вниз, то можно увидеть, какие команды были запущены ранее и повторить интересующую вас команду.
Итоги
В этой статье вы узнали, как установить PostgreSQL и как создать в нем демонстрационную базу для курса «Основы SQL». Также вы настроили и научились использовать два инструмента работы с PostgreSQL: pgAdmin и SQL Shell. Не обязательно использовать оба, выбирайте тот, который вам больше нравится: pgAdmin с Web-интерфейсом или командную строку SQL Shell.
В процессе экспериментов с SQL запросами в курсе вы можете случайно повредить созданную базу. В этом нет ничего страшного, базу данных можно легко пересоздать повторно запустив sql файл с операторами по созданию базы. При этом все имеющиеся таблицы будут удалены, заново созданы и заполнены данными. Все изменения, которые вы вносили, будут потеряны.
























