Шаг 4. Типы данных. Как создать свою первую таблицу и заполнить её данными
ЖИВОЙ ПРИМЕР
Вы уже установили PostgreSQL и научились открывать Query Tool.
Теперь самое время создать свою первую таблицу и заполнить её данными.
Это будет таблица для хранения цветов — простая, но показывающая все основные моменты.
В этом шаге мы рассмотрим два способа:
— Создание таблицы и вставка данных через визуальный интерфейс pgAdmin.
— Создание таблицы и вставка данных через SQL-запросы.
ЧТО ТАКОЕ ТАБЛИЦЫ В БАЗЕ ДАННЫХ
Таблица в базе данных — это как таблица в Excel или Word, но с одним важным отличием: каждая колонка имеет строго определённый тип данных.
Вы не можете в одну колонку записать и число, и текст — тип задаётся один раз при создании таблицы, и все данные в этой колонке должны соответствовать этому типу.
Правила именования таблиц и колонок:
Колонки таблиц в базе всегда имеют название, таблицы — тоже. Названия таблиц не должны повторяться в рамках одной схемы данных.
Наименования таблиц и колонок должны отвечать следующим базовым требованиям:
— Не должны начинаться с цифры
— Не должны содержать спецсимволы (допустимы только буквы, цифры и подчёркивание)
— Не должны совпадать с зарезервированными словами SQL (например, SELECT, TABLE, INSERT)
Примеры правильных имён:
sql
— правильно
CREATE TABLE employees (…);
CREATE TABLE orders_2026 (…);
CREATE TABLE user_profiles (…);
Примеры неправильных имён:
sql
— неправильно
CREATE TABLE 1employees (…); — начинается с цифры
CREATE TABLE employees-list (…); — содержит дефис
CREATE TABLE SELECT (…); — зарезервированное слово
ЧТО ТАКОЕ ТИПЫ ДАННЫХ
Тип данных — это правило, которое говорит базе данных: 'в этой колонке могут храниться только такие-то значения'.
Это помогает:
— не ошибаться — база не даст записать текст в колонку с числами
— экономить место — числа хранятся компактнее, чем текст
— быстро искать — базе проще сравнивать числа, чем длинные строки
Основные типы данных, которые мы будем использовать на первых шагах:
ЧТО ТАКОЕ ПЕРВИЧНЫЙ КЛЮЧ (PRIMARY KEY)
Первичный ключ — это уникальный идентификатор каждой строки в таблице.
Зачем он нужен:
— Чтобы каждая запись была уникальной.
— Чтобы можно было быстро найти строку.
— Чтобы другие таблицы могли ссылаться на эту запись (внешние ключи).
Свойства первичного ключа:
— Не может содержать NULL (пустое значение).
— Значения должны быть уникальными.
— В таблице может быть только один первичный ключ.
Примеры первичных ключей в реальной жизни:
— Номер заказа в интернет-магазине.
— ИНН человека.
— Номер телефона человека.
Что используют в качестве первичного ключа:
— Последовательность чисел (1, 2, 3, …) — самый распространённый подход.
— GUID / UUID — специальный набор символов, который гарантированно уникален во всём мире.
В таблице, которую мы создадим — employees (служащие), первичным ключом будет колонка id.
СПОСОБ 1. СОЗДАНИЕ ТАБЛИЦЫ ЧЕРЕЗ ВИЗУАЛЬНЫЙ ИНТЕРФЕЙС pgADMIN
Мы уже создавали таблицу в предыдущем шаге, но для закрепления повторим процесс ещё раз.
— Откройте базу данных.
— В левой панели pgAdmin раскройте Servers → PostgreSQL 18 → Databases.
— Выберите базу, с которой работаете (например, flower_delivery).
— Перейдите в раздел Tables.
— Раскройте Schemas → public → Tables.
— Создайте таблицу.
— Нажмите правой кнопкой мыши на Tables и выберите Create → Table.
— Задайте имя таблицы.
— В открывшемся окне в поле Name введите employees.
— Добавьте колонки.
— Перейдите на вкладку Columns и нажмите + для добавления колонок.
Добавьте следующие колонки:
— id — тип serial. Это будет первичный ключ. В разделе Constraints отметьте PRIMARY KEY.
— head_id — тип integer. В разделе Constraints отметьте NOT NULL.
— name — тип text. В разделе Constraints отметьте NOT NULL.
— position — тип text. Ограничения не требуются.
— salary — тип numeric. Ограничения не требуются.
— Сохраните таблицу.
— Нажмите Save.
СПОСОБ 1. ЗАПОЛНЕНИЕ ТАБЛИЦЫ ЧЕРЕЗ ВИЗУАЛЬНЫЙ ИНТЕРФЕЙС pgADMIN
Как и на предыдущем шаге, заполним таблицу данными через визуальный интерфейс.
— Откройте таблицу для редактирования.
— В левой панели pgAdmin найдите созданную таблицу employees.
— Нажмите на неё правой кнопкой мыши и выберите View/Edit Data → All Rows.
— Добавьте строки.
— В открывшемся окне вы увидите пустую таблицу.
— Нажмите на значок + (Add row) или кликните в последнюю строку (там, где отображается (NULL)).
— Заполните поля.
— Для каждой строки введите значения:
— Сохраните изменения.
— Нажмите Save Data Changes (иконка дискеты) или нажмите F6.
СПОСОБ 2. СОЗДАНИЕ ТАБЛИЦЫ ЧЕРЕЗ SQL
А теперь сделаем то же самое, но через SQL-запросы — этот способ профессиональнее и быстрее.
— Откройте Query Tool.
— В pgAdmin выберите базу данных (например, flower_delivery), затем в меню Tools → Query Tool.
— Напишите запрос на создание таблицы.
sql
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
head_id INTEGER NOT NULL,
name TEXT NOT NULL,
position TEXT,
salary NUMERIC
);
Что тут происходит
— CREATE TABLE — команда, которая создаёт новую таблицу в базе данных.
— employees — имя таблицы.
— id SERIAL PRIMARY KEY — автоматически увеличиваемый уникальный номер, первичный ключ.
— head_id INTEGER NOT NULL — идентификатор руководителя, не может быть пустым.
— name TEXT NOT NULL — имя, не может быть пустым.
— position TEXT — должность, может быть пустой.
— salary NUMERIC — зарплата, может быть пустой.
— Выполните запрос.
— Нажмите кнопку Execute (▶) или клавишу F5.
СПОСОБ 2. ЗАПОЛНЕНИЕ ТАБЛИЦЫ ЧЕРЕЗ SQL
— Откройте Query Tool.
— В pgAdmin выберите базу данных (например, flower_delivery), затем в меню Tools → Query Tool.
— Напишите запрос на вставку данных.
sql
INSERT INTO employees (id, head_id, name, position, salary) VALUES
(1, 1, 'Анна', 'Директор', 100000),
(2, 1, 'Борис', 'Менеджер', 70000),
(3, 1, 'Виктор', 'Менеджер', 70000),
(4, 2, 'Галина', 'Продавец', 50000),
(5, 2, 'Дмитрий', 'Продавец', 50000),
(6, 3, 'Елена', 'Продавец', 50000),
(7, 2, 'Жанна', 'Продавец', 50000),
(8, 3, 'Зоя', 'Продавец', 50000),
(9, 1, 'Иван', 'Аналитик', 60000),
(10, 9, 'Кирилл', 'Стажёр', 30000);
Что тут происходит
— INSERT INTO employees — команда для добавления данных в таблицу.
— В скобках после имени таблицы перечислены колонки, в которые мы вставляем значения.
— VALUES — список строк с данными. Каждая строка в своих скобках.
— Выполните запрос.
— Нажмите кнопку Execute (▶) или клавишу F5.
— Проверьте результат.
sql
SELECT * FROM employees;
Что тут происходит
SELECT * FROM employees — выводит все строки из таблицы employees. Звёздочка * означает 'все колонки'.
ТИПИЧНЫЕ ОШИБКИ
Ошибка 1. Забыть указать NOT NULL для колонки, которая не должна быть пустой.
Неверно:
sql
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT
);
Если не указать NOT NULL, в колонку name можно вставить пустое значение (NULL), что часто приводит к проблемам.
Верно:
sql
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL
);
Ошибка 2. Забыть указать PRIMARY KEY для колонки, которая должна быть уникальным идентификатором.
Без первичного ключа в таблице могут появиться дубликаты, и на неё будет сложно ссылаться из других таблиц.
Неверно:
sql
CREATE TABLE employees (
id SERIAL,
name TEXT
);
Верно:
sql
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT
);
Ошибка 3. Попытаться вставить строку с уже существующим значением первичного ключа.
Неверно:
sql
INSERT INTO employees (id, name) VALUES (1, 'Анна');
INSERT INTO employees (id, name) VALUES (1, 'Борис');
PostgreSQL выдаст ошибку: duplicate key value violates unique constraint.
Верно:
sql
INSERT INTO employees (id, name) VALUES (1, 'Анна');
INSERT INTO employees (id, name) VALUES (2, 'Борис');
Ошибка 4. Забыть кавычки для текстовых значений.
Неверно:
sql
INSERT INTO employees (name) VALUES (Анна);
PostgreSQL подумает, что Анна — это имя колонки или переменной, и выдаст ошибку.
Верно:
sql
INSERT INTO employees (name) VALUES ('Анна');
Ошибка 5. Использовать двойные кавычки для строк.
В SQL строки записываются в одинарных кавычках. Двойные кавычки используются для имён таблиц и колонок (если они содержат пробелы или совпадают с ключевыми словами).
Неверно:
sql
INSERT INTO employees (name) VALUES ('Анна');
Верно:
sql
INSERT INTO employees (name) VALUES ('Анна');
ТОНКОСТИ И НЮАНСЫ
— SERIAL — это не тип данных, а сокращение. На самом деле PostgreSQL создаёт последовательность (SEQUENCE) и устанавливает значение по умолчанию для колонки. При вставке, если не указать id, он заполнится автоматически.
— Кавычки. Для строк — одинарные: 'Анна'. Для имён таблиц и колонок — двойные: 'employees' (обычно не нужны, если имя не совпадает с ключевым словом). Для чисел — никаких кавычек: 100000.
— Порядок колонок в INSERT. Если вы перечисляете колонки, порядок не важен, главное — чтобы значения соответствовали. Если не перечисляете, значения должны идти в том же порядке, что и при создании таблицы.
sql
— порядок колонок не важен
INSERT INTO employees (name, salary, id) VALUES ('Анна', 100000, 1);
— порядок важен — значения должны идти в порядке колонок таблицы
INSERT INTO employees VALUES (1, 'Анна', 100000);
— NOT NULL и PRIMARY KEY. PRIMARY KEY автоматически подразумевает NOT NULL, но не наоборот. Можно создать колонку, которая не может быть пустой, но не является первичным ключом.
— Что делать, если таблица уже существует. Если вы уже создали таблицу, повторный запуск CREATE TABLE вызовет ошибку. Чтобы этого избежать, можно использовать CREATE TABLE IF NOT EXISTS:
sql
CREATE TABLE IF NOT EXISTS employees (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL
);
Что тут происходит
Команда CREATE TABLE IF NOT EXISTS проверяет, существует ли таблица с таким именем. Если таблицы нет — создаёт её. Если таблица уже есть — ничего не делает и не выдаёт ошибку. Это удобно, когда скрипт может выполняться несколько раз (например, при повторной настройке базы данных).
ИЗ ОПЫТА
Когда я только начинал работать с PostgreSQL, я создал таблицу employees без первичного ключа.
Через некоторое время в ней появились дубликаты — два сотрудника с одинаковым id.
Я долго не мог понять, почему при выборке по id возвращается две строки.
С тех пор я всегда добавляю PRIMARY KEY для таблиц, где это нужно, и обязательно проверяю, что колонки, которые не должны быть пустыми, помечены NOT NULL.
ВОПРОСЫ И ОТВЕТЫ
В: Можно ли создать таблицу с другим именем?
О: Да. Имя должно быть уникальным в рамках одной схемы. Старайтесь выбирать осмысленные имена, например employees, products, orders.
В: Что делать, если ошибка в синтаксисе?
О: PostgreSQL выдаст сообщение об ошибке. Внимательно прочитайте его — там обычно указано, где примерно ошибка и что не так. Проверьте кавычки, запятые, названия колонок.
В: Как удалить таблицу?
О: Используйте команду:
sql
DROP TABLE employees;
Что тут происходит
DROP TABLE удаляет таблицу и все данные в ней. Будьте осторожны — восстановить данные будет сложно.
В: Можно ли добавить колонку в уже существующую таблицу?
О: Да. Например:
sql
ALTER TABLE employees ADD COLUMN email TEXT;
Что тут происходит
ALTER TABLE изменяет структуру таблицы. В данном случае добавляется новая колонка email с типом TEXT.
ПОПРОБУЙ САМ
— Создайте таблицу flowers_first с колонками:
— id (SERIAL, PRIMARY KEY)
— name (TEXT, NOT NULL)
— price (NUMERIC)
— Вставьте в неё 3–4 цветка (например, Роза, Тюльпан, Лилия) с разными ценами.
— Выведите все строки из таблицы.
— (По желанию) Создайте такую же таблицу через визуальный интерфейс pgAdmin.