База данных в PostgreSQL — это фундаментальная структура для хранения и организации данных, которая служит основой для любых приложений и систем. Создание базы данных является первым и одним из самых важных шагов при работе с PostgreSQL. В этом руководстве мы подробно разберем процесс создания базы данных с использованием pgAdmin 4, а также рассмотрим альтернативные способы и лучшие практики.
Что такое база данных в PostgreSQL?
База данных PostgreSQL представляет собой структурированное хранилище, которое содержит:
-
Таблицы (Tables) — для хранения данных в строковом формате
-
Схемы (Schemas) — для организации таблиц в логические группы
-
Индексы (Indexes) — для ускорения поиска данных
-
Функции и процедуры — для бизнес-логики на уровне БД
-
Триггеры (Triggers) — для автоматического выполнения действий
-
Последовательности (Sequences) — для генерации уникальных идентификаторов
-
Представления (Views) — для виртуальных таблиц
Каждая база данных в PostgreSQL является изолированной средой со своими пользователями, привилегиями и настройками.
Подготовка к созданию базы данных
Требования перед началом
-
Установленная СУБД PostgreSQL — версия 10 или выше
-
Установленный pgAdmin 4 — версия 4 или выше
-
Права администратора или права на создание баз данных
-
Достаточно места на диске — минимум 100 МБ для пустой базы
Проверка установки PostgreSQL
# Проверка версии PostgreSQL psql --version # Проверка статуса службы (Linux) sudo systemctl status postgresql # Проверка статуса службы (Windows) services.msc → Поиск "PostgreSQL"
Пошаговое создание базы данных через pgAdmin 4
Шаг 1: Запуск pgAdmin 4
Для Windows:
-
Откройте меню "Пуск"
-
Найдите "pgAdmin 4" в списке программ
-
Нажмите на значок приложения
-
При первом запуске введите мастер-пароль (если настроен)
Для macOS:
-
Откройте Launchpad или Applications
-
Найдите pgAdmin 4
-
Запустите приложение
Для Linux:
# Запуск из терминала pgadmin4 # Или через ярлык в меню приложений
Веб-версия через браузер:
-
Откройте браузер
-
Перейдите по адресу:
http://localhost:5050(порт по умолчанию) -
Войдите с учетными данными
Шаг 2: Подключение к серверу PostgreSQL
-
В левой панели (Object Browser) найдите раздел Servers
-
Разверните список серверов (щелкните на треугольник рядом)
-
Найдите нужный сервер (обычно "PostgreSQL" или пользовательское имя)
-
Подключитесь одним из способов:
-
Двойной щелчок по имени сервера
-
Правой кнопкой → Connect Server
-
-
При необходимости введите пароль пользователя PostgreSQL
Если сервер не отображается:
-
Правой кнопкой на Servers → Register → Server
-
Заполните параметры подключения:
-
General → Name: Любое имя (например, "Local PostgreSQL")
-
Connection → Host: localhost или IP-адрес
-
Connection → Port: 5432 (стандартный)
-
Connection → Username: postgres (или другой пользователь)
-
Connection → Password: Пароль пользователя
-
-
Нажмите Save
Шаг 3: Создание новой базы данных
-
В дереве объектов разверните подключенный сервер
-
Найдите раздел Databases
-
Правой кнопкой на Databases → Create → Database...
-
Откроется диалоговое окно "Create - Database"
Детальная настройка параметров базы данных
Вкладка "General" (Общие настройки)
Database (Имя базы данных):
-
Используйте только латинские буквы, цифры и подчеркивания
-
Начинайте с буквы (не с цифры)
-
Избегайте специальных символов и пробелов
-
Примеры правильных имен:
-
company_db -
online_store -
analytics_2024 -
test_environment
-
Owner (Владелец базы данных):
-
По умолчанию: пользователь, от имени которого создается база
-
Рекомендуется создать отдельного пользователя для приложения
-
Выбор из списка существующих пользователей
-
Владелец имеет полные права на базу данных
Комментарий (Comment):
-
Необязательное поле
-
Рекомендуется заполнять для документации
-
Пример: "База данных для системы учета сотрудников компании"
Вкладка "Definition" (Определение)
Template (Шаблон):
-
template1 (по умолчанию) — стандартная база-шаблон
-
template0 — "чистая" база без изменений
-
Рекомендации:
-
Используйте
template1для большинства случаев -
Используйте
template0при проблемах с кодировкой -
Не используйте пользовательские базы как шаблоны без необходимости
-
Encoding (Кодировка):
-
UTF8 (рекомендуется) — поддерживает все языки
-
WIN1251 — для русского языка в Windows
-
LATIN1 — для западноевропейских языков
-
Важно: кодировка влияет на хранение текстовых данных
Таблица сравнения кодировок:
| Кодировка | Поддержка языков | Размер символа | Рекомендация |
|---|---|---|---|
| UTF8 | Все языки мира | 1-4 байта | ✅ Рекомендуется |
| WIN1251 | Русский, английский | 1 байт | Для legacy-систем |
| LATIN1 | Западная Европа | 1 байт | Специфичные случаи |
| SQL_ASCII | Без преобразования | 1 байт | ❌ Не рекомендуется |
Tablespace (Табличное пространство):
-
pg_default (по умолчанию) — основное пространство
-
pg_global — для системных каталогов
-
Пользовательские табличные пространства для распределения данных
Collation (Сортировка):
-
Определяет правила сравнения и сортировки строк
-
Примеры:
-
CилиPOSIX— сортировка по коду символа -
en_US.UTF-8— для английского языка -
ru_RU.UTF-8— для русского языка
-
-
По умолчанию: наследуется от шаблона
Character Type (Тип символов):
-
Определяет классификацию символов
-
Обычно оставляется по умолчанию
-
Влияет на функции работы со строками
Connection limit (Ограничение подключений):
-
-1— без ограничений (по умолчанию) -
Конкретное число — для контроля нагрузки
-
Пример:
100для ограничения одновременных подключений
Вкладка "Security" (Безопасность)
Privileges (Привилегии):
-
Настройка прав доступа для разных пользователей
-
Можно добавить после создания базы
-
Примеры привилегий:
-
CONNECT — право на подключение
-
CREATE — право создавать объекты
-
TEMPORARY — право создавать временные таблицы
-
Security Labels (Метки безопасности):
-
Для систем с многоуровневой безопасностью
-
Обычно не используется в стандартных приложениях
Вкладка "Parameters" (Параметры)
Search Path (Путь поиска):
-
Порядок поиска схем по умолчанию
-
Пример:
"$user", public -
Указывает, в каких схемах искать объекты
Другие параметры:
-
Можно настроить специфичные параметры БД
-
Переопределяют глобальные настройки сервера
-
Примеры:
-
work_mem = '64MB'— память для операций -
maintenance_work_mem = '256MB'— память для обслуживания
-
Вкладка "Advanced" (Расширенные настройки)
Tablespace для системных каталогов:
-
Обычно
pg_default -
Можно указать другое пространство
Allow connections (Разрешить подключения):
-
По умолчанию
Yes -
Можно временно отключить доступ к базе
Is template (Является шаблоном):
-
По умолчанию
No -
Если
Yes— базу можно использовать как шаблон
Пример создания реальной базы данных
Сценарий: Создание базы для интернет-магазина
Параметры:
-
Имя:
online_store -
Владелец:
store_admin -
Шаблон:
template1 -
Кодировка:
UTF8 -
Сортировка:
ru_RU.UTF-8 -
Ограничение подключений:
50
Процесс в pgAdmin 4:
-
Заполните вкладку General:
-
Database:
online_store -
Owner:
store_admin(предварительно созданный пользователь) -
Comment: "База данных интернет-магазина электроники"
-
-
Заполните вкладку Definition:
-
Template:
template1 -
Encoding:
UTF8 -
Tablespace:
pg_default -
Collation:
ru_RU.UTF-8 -
Character type:
C -
Connection limit:
50
-
-
Нажмите Save
Создание базы данных через SQL-запрос
Базовый синтаксис
-- Простейшая команда создания базы CREATE DATABASE database_name; -- Пример с основными параметрами CREATE DATABASE company_db WITH OWNER = postgres ENCODING = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False;
Продвинутые примеры SQL
Создание базы с наследованием от template0:
CREATE DATABASE analytics_platform WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'C' LC_CTYPE = 'C' ALLOW_CONNECTIONS = true CONNECTION LIMIT = 100 IS_TEMPLATE = false;
Создание базы для тестирования:
-- Специальная база для тестов CREATE DATABASE test_db WITH OWNER = test_user ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = 10 IS_TEMPLATE = false COMMENT = 'Тестовая база для разработки';
Создание базы с пользовательским табличным пространством:
-- Сначала создаем табличное пространство CREATE TABLESPACE fast_ssd LOCATION = '/ssd/postgresql/data'; -- Затем создаем базу в этом пространстве CREATE DATABASE high_performance_db WITH OWNER = performance_user ENCODING = 'UTF8' TABLESPACE = fast_ssd CONNECTION LIMIT = -1;
Проверка созданной базы данных
Проверка через pgAdmin
-
В дереве объектов обновите список (правой кнопкой → Refresh)
-
Новая база появится в разделе Databases
-
Разверните базу → Schemas → public
-
Убедитесь, что база создана успешно
Проверка через SQL
-- Подключитесь к серверу \c postgres -- или другая системная база -- Посмотреть список всех баз данных SELECT datname as database_name, pg_size_pretty(pg_database_size(datname)) as size, datcollate as collation, datconnlimit as connection_limit FROM pg_database WHERE datistemplate = false ORDER BY datname; -- Детальная информация о конкретной базе SELECT datname, pg_encoding_to_char(encoding) as encoding, datcollate, datctype, datconnlimit, pg_database_size(datname) as size_bytes, pg_size_pretty(pg_database_size(datname)) as size_human FROM pg_database WHERE datname = 'online_store';
Проверка через командную строку
# Подключение к PostgreSQL psql -U postgres -h localhost # Список баз данных \l # Детальная информация о базе \l+ online_store # Подключение к созданной базе \c online_store # Проверка текущей базы SELECT current_database();
Пост-создательные действия
Создание схем (Schemas)
-- Создание схемы для пользовательских данных CREATE SCHEMA app_data AUTHORIZATION store_admin; -- Создание схемы для отчетности CREATE SCHEMA reports AUTHORIZATION report_user; -- Настройка пути поиска ALTER DATABASE online_store SET search_path TO app_data, public;
Создание пользователей и назначение прав
-- Создание пользователя приложения CREATE USER app_user WITH PASSWORD 'secure_password123' NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION CONNECTION LIMIT 20 VALID UNTIL '2025-12-31'; -- Назначение прав на базу GRANT CONNECT ON DATABASE online_store TO app_user; -- Назначение прав на схему GRANT USAGE ON SCHEMA app_data TO app_user; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app_data TO app_user; GRANT USAGE ON ALL SEQUENCES IN SCHEMA app_data TO app_user;
Настройка расширений (Extensions)
-- Подключение к целевой базе \c online_store -- Установка полезных расширений CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- Генерация UUID CREATE EXTENSION IF NOT EXISTS "pgcrypto"; -- Криптография CREATE EXTENSION IF NOT EXISTS "postgis"; -- Геопространственные данные CREATE EXTENSION IF NOT EXISTS "pg_stat_statements"; -- Статистика запросов
Решение распространенных проблем
Проблема 1: Ошибка "permission denied"
Симптомы:
ERROR: permission denied to create database
Решение:
-- Проверка текущих прав SELECT usename, usecreatedb FROM pg_user WHERE usename = CURRENT_USER; -- Предоставление прав (от имени суперпользователя) ALTER USER ваш_пользователь CREATEDB; -- Или создание базы от имени postgres sudo -u postgres psql CREATE DATABASE your_db OWNER ваш_пользователь;
Проблема 2: Ошибка кодировки
Симптомы:
ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (WIN1251)
Решение:
-- Использование template0 вместо template1 CREATE DATABASE новая_база WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8';
Проблема 3: Недостаточно места на диске
Решение:
# Проверка свободного места df -h /var/lib/postgresql # Очистка старых данных psql -U postgres -c "DROP DATABASE IF EXISTS old_db;" # Настройка табличного пространства на другом диске CREATE TABLESPACE big_disk LOCATION '/mnt/big_disk/postgres'; CREATE DATABASE big_db TABLESPACE big_disk;
Проблема 4: База не отображается в pgAdmin
Решение:
-
Нажмите Refresh в дереве объектов
-
Проверьте подключение к правильному серверу
-
Убедитесь, что у пользователя есть права на просмотр базы
-
Перезапустите pgAdmin
Лучшие практики создания баз данных
1. Именование баз данных
Рекомендуется:
-
Использовать snake_case:
company_db,user_analytics -
Добавлять суффиксы:
_dev,_test,_prod -
Избегать зарезервированных слов
-
Использовать осмысленные имена
Не рекомендуется:
-
test,temp,db1— слишком общие -
my-company-db— дефисы не поддерживаются -
123database— начинать с цифры
2. Безопасность
-- Создание отдельного пользователя для каждой базы CREATE USER app_user WITH PASSWORD 'StrongPassword!2024'; -- Ограничение подключений ALTER DATABASE production_db CONNECTION LIMIT 100; -- Отключение публичного доступа REVOKE CONNECT ON DATABASE sensitive_db FROM PUBLIC; -- Регулярная смена паролей ALTER USER app_user WITH PASSWORD 'NewStrongPassword!2025';
3. Производительность
-- Настройка параметров при создании CREATE DATABASE high_perf_db WITH CONNECTION LIMIT = 50 ALLOW_CONNECTIONS = true; -- Дополнительные настройки после создания ALTER DATABASE high_perf_db SET work_mem = '64MB'; ALTER DATABASE high_perf_db SET maintenance_work_mem = '256MB'; ALTER DATABASE high_perf_db SET shared_buffers = '128MB';
4. Документация
-- Добавление комментариев COMMENT ON DATABASE online_store IS 'Основная база данных интернет-магазина. Создана: 2024-01-15. Ответственный: отдел разработки.'; -- Хранение метаданных CREATE TABLE database_metadata ( db_name VARCHAR(100) PRIMARY KEY, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by VARCHAR(100), purpose TEXT, version VARCHAR(20), backup_schedule TEXT ); INSERT INTO database_metadata (db_name, created_by, purpose) VALUES ('online_store', 'postgres', 'Хранение данных интернет-магазина');
Создание базы для различных сценариев
Для веб-приложения
CREATE DATABASE web_app_db WITH OWNER = web_app_user ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' CONNECTION LIMIT = 200 IS_TEMPLATE = false COMMENT = 'База для веб-приложения на Django/Node.js';
Для аналитики и отчетности
CREATE DATABASE analytics_db WITH OWNER = analyst_user ENCODING = 'UTF8' TABLESPACE = fast_ssd CONNECTION LIMIT = 50 ALLOW_CONNECTIONS = true;
Для разработки и тестирования
-- Тестовая база CREATE DATABASE test_app_db WITH OWNER = developer ENCODING = 'UTF8' CONNECTION LIMIT = 10 IS_TEMPLATE = false COMMENT = 'Тестовая среда для разработки';
Для геопространственных данных
CREATE DATABASE gis_db WITH OWNER = gis_admin ENCODING = 'UTF8' TEMPLATE = template0; -- После создания установите PostGIS \c gis_db CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology;
Управление жизненным циклом базы данных
Резервное копирование
# Создание резервной копии через pg_dump pg_dump -U postgres -d online_store -F c -b -v -f "/backups/online_store_$(date +%Y%m%d).backup" # Восстановление из резервной копии pg_restore -U postgres -d online_store_restored "/backups/online_store_20240115.backup"
Мониторинг
-- Мониторинг размера базы SELECT datname, pg_size_pretty(pg_database_size(datname)) as size, age(datfrozenxid) as transaction_age, numbackends as active_connections FROM pg_database WHERE datistemplate = false;
Очистка и обслуживание
-- Анализ и очистка VACUUM ANALYZE; -- Перестроение индексов REINDEX DATABASE online_store; -- Обновление статистики ANALYZE;
Заключение
Создание базы данных в PostgreSQL — это фундаментальный процесс, который определяет будущую архитектуру вашего приложения. Ключевые моменты для успешного создания:
-
Планирование — определите требования к именованию, безопасности и производительности
-
Использование pgAdmin 4 — удобный графический интерфейс для настройки всех параметров
-
Правильная настройка — кодировка UTF8, адекватные лимиты подключений
-
Безопасность — отдельные пользователи, ограничение прав
-
Документация — комментарии и метаданные для будущего сопровождения
Созданная база данных — это только начало. Следующие шаги включают создание таблиц, настройку индексов, определение бизнес-логики через функции и триггеры, а также настройку репликации для отказоустойчивости.
Помните, что хорошо спроектированная база данных — это основа стабильной и производительной системы. Начните с малого, следуйте лучшим практикам, и ваша база данных будет служить надежной основой для любых приложений.
База данных создана успешно? Переходите к следующему шагу — проектированию таблиц и созданию структуры данных для вашего приложения!
Статья подготовлена по материалам обучающего видео для вашего удобства.