Создать таблицу в pgAdmin 4 можно двумя способами. Через мастер: в дереве слева раскройте базу до узла Tables, щёлкните по нему правой кнопкой и выберите «Create» → «Table…», задайте имя, на вкладке «Columns» добавьте столбцы и нажмите «Save». Через SQL: откройте «Query Tool», вставьте команду CREATE TABLE и нажмите F5.
Мастер удобен, пока вы учитесь и хотите видеть все параметры перед глазами. SQL быстрее, его можно сохранить и повторить на другом сервере. Ниже разберём оба способа на одном примере, а заодно создание базы, заполнение таблицы и ошибки, с которыми новички сталкиваются чаще всего. Если язык запросов пока совсем незнаком, начните с обзора языка SQL.
Что нужно подготовить

pgAdmin сам данные не хранит: это графическая оболочка, а таблицы живут на сервере PostgreSQL. Перед началом проверьте три вещи:
- установлен PostgreSQL и сервер запущен, локально или на хостинге;
- установлен pgAdmin 4 с официальной страницы загрузки, есть версии для Windows, macOS и Linux;
- сервер зарегистрирован в pgAdmin: в дереве «Servers» виден ваш сервер, и при щелчке по нему он подключается без ошибки пароля.
Интерфейс pgAdmin по умолчанию английский. Русский включается в настройках: «File» → «Preferences» → «Miscellaneous» → «User Interface» → поле «Language» (в документации pgAdmin это раздел о настройках интерфейса). В статье подписи даём по-английски, а русский вариант из файла перевода pgAdmin ставим в скобках.
Если pgAdmin не нравится, ту же работу делает DBeaver, у нас есть инструкция по подключению DBeaver к PostgreSQL.
Как создать базу данных в pgAdmin
Для учебных таблиц заведите отдельную базу, служебную postgres лучше не трогать. Создаётся база так:
- Раскройте сервер в дереве слева и найдите узел «Databases» («Базы данных»).
- Щёлкните по нему правой кнопкой и выберите «Create» → «Database…» («Создать» → «База данных…»).
- На вкладке «General» в поле «Database» впишите имя, например
school_db. Имя пишите латиницей в нижнем регистре, почему так, объясним в разделе об ошибках. - Нажмите «Save». База появится в дереве.
Создать базу может суперпользователь или роль с атрибутом CREATEDB, так сказано в документации PostgreSQL. Если пункта «Database…» нет или сохранение падает с ошибкой прав, подключитесь под пользователем postgres.
Создание таблицы через мастер
Для примера сделаем таблицу школ: номер, который база проставит сама, и название.
- Раскройте путь «Databases» →
school_db→ «Schemas» →public→ «Tables». - Щёлкните правой кнопкой по «Tables» и выберите «Create» → «Table…» («Создать» → «Таблица…»).
- На вкладке «General» («Общие») заполните «Name» («Имя»):
schools. Поля «Owner» и «Schema» оставьте как есть, по умолчанию владельцем становится роль, которая создаёт таблицу. - Перейдите на вкладку «Columns» («Столбцы») и нажмите плюс, чтобы добавить строку.
- Для первого столбца задайте «Name» =
id, «Data type» =integer, включите переключатели «Not NULL?» и «Primary key?» («Не NULL?» и «Первичный ключ?»). - Снова нажмите плюс и добавьте
nameс типомcharacter varying. В поле «Length/Precision» («Длина/точность») поставьте 100 и включите «Not NULL?». - Откройте вкладку «SQL»: там pgAdmin показывает команду, которую отправит на сервер. Проверьте её и нажмите «Save» («Сохранить»).
Таблица появится в узле «Tables». Если её не видно, щёлкните по «Tables» правой кнопкой и выберите «Refresh…» («Обновить…»).
Ограничения, которые не помещаются в переключатели, задаются на вкладке «Constraints» («Ограничения»). Внутри неё отдельные вкладки: «Primary Key», «Foreign Key», «Check», «Unique» и «Exclude». На каждой порядок одинаковый: плюс добавляет ограничение, значок карандаша открывает его настройки. Подробно все поля описаны в справке по диалогу таблицы.
Какой тип данных выбрать
Тип столбца влияет на то, что в него можно записать и как с ним считать. Для учебных таблиц хватает восьми типов:
| Тип | Что хранит | Пример |
|---|---|---|
integer |
целые числа до 2,1 млрд | номер, количество |
bigint |
большие целые | счётчики событий |
varchar(n) |
строка не длиннее n символов | название, email |
text |
строка без ограничения длины | описание, отзыв |
numeric(10, 2) |
точное число, всего 10 цифр, из них 2 после запятой | цена, сумма |
date |
дата без времени | дата старта |
timestamptz |
дата и время с часовым поясом | момент создания записи |
boolean |
да или нет | активен ли курс |
numeric(10, 2) стоит разобрать отдельно, его часто путают. Первое число означает точность, то есть все значащие цифры. Второе означает масштаб, цифры после запятой. В документации PostgreSQL пример такой: у числа 23.5141 точность 6 и масштаб 4. Значит, в numeric(10, 2) влезет максимум 99 999 999,99, а 1234,567 округлится до 1234,57.
Типы, ключи и связи между таблицами подробно разбирают на курсах по PostgreSQL, там же учат проектировать схему под задачу.
Как создать таблицу SQL-запросом в Query Tool

Мастер хорош для одной таблицы. Когда таблиц несколько и они связаны, быстрее написать SQL. Так таблицы создают в работе SQL-аналитики и разработчики баз данных. Порядок такой:
- Выделите в дереве базу
school_db. - Откройте меню «Tools» → «Query Tool» («Инструменты» → «Инструмент запросов»). То же окно открывается правым щелчком по базе.
- Вставьте код ниже в редактор.
- Нажмите F5 или кнопку «Execute script» («Выполнить скрипт»). Чтобы выполнить только запрос под курсором, есть Alt+F5 (на Mac Option+F5), так написано в описании панели Query Tool.
- Посмотрите вкладку «Messages» («Сообщения») внизу: там будет ответ сервера.
Код создаёт две связанные таблицы, школы и их курсы. Если таблицу schools вы уже сделали мастером, удалите её или пропустите первую команду:
CREATE TABLE schools (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name varchar(100) NOT NULL UNIQUE
);
CREATE TABLE courses (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
school_id integer NOT NULL REFERENCES schools (id),
title varchar(200) NOT NULL,
price numeric(10, 2) CHECK (price >= 0),
start_date date,
created_at timestamptz NOT NULL DEFAULT now()
);
Что здесь происходит:
GENERATED ALWAYS AS IDENTITYделает столбец автонумерованным. Номер ставит сама база, вручную его не пишут;PRIMARY KEYзадаёт первичный ключ, по нему строка однозначно находится. Без него pgAdmin не даст редактировать данные в таблице;REFERENCES schools (id)создаёт внешний ключ: курс нельзя записать за школу, которой нет;CHECK (price >= 0)не пустит отрицательную цену;DEFAULT now()сам подставит время создания записи.
Порядок команд важен: schools создаётся первой, потому что courses на неё ссылается. Про отсутствие значения в столбце и NOT NULL подробнее рассказываем в статье о NULL в SQL.
Как заполнить таблицу и посмотреть данные
Строки добавляются командой INSERT в том же Query Tool. Столбец id не указываем, номера база раздаст сама:
INSERT INTO schools (name)
VALUES ('Школа данных'), ('Школа разработки');
INSERT INTO courses (school_id, title, price, start_date)
VALUES
(1, 'Основы SQL', 24900, '2026-11-10'),
(1, 'PostgreSQL для аналитиков', 39900.50, '2026-12-01'),
(2, 'Python с нуля', 19900, NULL);
Проверим, что связь работает. Этот запрос собирает курсы вместе с названием школы:
SELECT c.title, s.name AS school, c.price
FROM courses AS c
JOIN schools AS s ON s.id = c.school_id
ORDER BY c.price DESC;
На вкладке «Data Output» («Результат») получится:
| title | school | price |
|---|---|---|
| PostgreSQL для аналитиков | Школа данных | 39900.50 |
| Основы SQL | Школа данных | 24900.00 |
| Python с нуля | Школа разработки | 19900.00 |
Синтаксис SELECT с условиями и соединениями подробно разобран в статье о команде SELECT. Примеры там на MySQL, но базовые запросы в PostgreSQL пишутся так же.
Без SQL данные тоже можно посмотреть и поправить. Щёлкните по таблице правой кнопкой и выберите «View/Edit Data» → «All Rows» («Просмотр/редактирование данных» → «Все строки»). Откроется сетка, в которой ячейки правятся двойным щелчком, а новая строка добавляется кнопкой «Add row» («Добавить строку»). Изменения уходят на сервер только после кнопки «Save Data Changes» («Сохранить изменения данных») или клавиши F6.
Если сетка не даёт ничего менять, у таблицы нет первичного ключа. По справке pgAdmin, без OID или первичного ключа данные показываются только для чтения.
Частые ошибки при создании таблиц

Сообщение сервера появляется на вкладке «Messages» с пометкой ERROR. Тексты ниже даны на английском. Если сервер настроен на русский язык, тот же смысл придёт в переводе. Это семь ошибок, которые чаще всего возникают на первых таблицах.
| Сообщение | Причина | Что делать |
|---|---|---|
relation "schools" already exists |
таблица с таким именем уже есть в схеме | выбрать другое имя или написать CREATE TABLE IF NOT EXISTS |
relation "students" does not exist |
таблицу создали с заглавной буквы, Students, а в запросе имя без кавычек |
писать "Students" в кавычках или пересоздать таблицу в нижнем регистре |
violates foreign key constraint "courses_school_id_fkey" |
в school_id номер школы, которой нет в schools |
сначала добавить школу, потом курс |
numeric field overflow |
число не помещается в numeric(10, 2), например 123 456 789 |
увеличить точность, например до numeric(12, 2) |
violates check constraint "courses_price_check" |
в цену попало отрицательное число | исправить значение, проверка работает как задумано |
null value in column "title" ... violates not-null constraint |
обязательный столбец оставили пустым | передать значение или убрать NOT NULL |
cannot insert a non-DEFAULT value into column "id" |
в столбец GENERATED ALWAYS AS IDENTITY пытаются записать свой номер |
не указывать id в INSERT |
Коварнее всего вторая строка таблицы. В мастере легко назвать таблицу Students по привычке, и pgAdmin сохранит имя в кавычках, чтобы не потерять заглавную букву. Функция pgAdmin, которая решает, нужны ли кавычки, ставит их на любое имя, где есть что-то кроме строчной латиницы, цифр и подчёркивания. А PostgreSQL переводит имена без кавычек в нижний регистр, поэтому SELECT * FROM Students ищет таблицу students и не находит.
Решение: имена таблиц и столбцов пишите латиницей в нижнем регистре, слова разделяйте подчёркиванием: например start_date вместо StartDate.
Ещё одна ошибка ждёт на рабочем сервере, куда вы зашли под обычным пользователем: permission denied for schema public. В PostgreSQL 15 право создавать объекты в схеме public у всех пользователей по умолчанию отобрали, это есть в примечаниях к выпуску 15. Изменение касается новых кластеров и новых баз. Решение: попросить у администратора право CREATE на схему или отдельную схему для себя.
Где освоить PostgreSQL системно
Таблицы в pgAdmin вы создавать умеете. Дальше идут индексы, транзакции, оптимизация запросов и проектирование схемы под реальные данные. Это стоит разобрать на курсе с практикой и проверкой заданий. Вот курсы по PostgreSQL из нашего каталога:
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| PostgreSQL для начинающих Перейти на сайт курса | 24 813 ₽ | - | 1 месяц | Обзор курса | |
| PostgreSQL База Перейти на сайт курса | 30 000 ₽ | 7500 ₽/мес. | 2 года | Обзор курса | |
| Профессия «Аналитик данных с нуля до middle» Перейти на сайт курса | 145 600 ₽ | 6066 ₽/мес. | 12 месяцев | Обзор курса | |
| Профессия «Python-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Профессия «Data Scientist PRO» Перейти на сайт курса | 224 595 ₽ | 7245 ₽/мес. | 12 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по PostgreSQL
Если думаете сделать базы данных профессией, посмотрите, чем занимается администратор баз данных и как стать SQL-разработчиком за год.




