Гид по технологиям

Подключение PostgreSQL к приложению Django

7 min read Databases Обновлено 09 Jan 2026
PostgreSQL и Django: установка и подключение
PostgreSQL и Django: установка и подключение

Чёрные серверные стойки в серверной комнате

Добавление базы данных в ваше приложение обеспечивает целостность и безопасность данных. PostgreSQL (Postgres) — это реляционная СУБД, совместимая с большинством операционных систем и популярных языков программирования. Postgres поддерживает различные типы данных и документы, а также сложные возможности (например, транзакции, индексы, JSONB).

В этом руководстве вы узнаете, как установить, настроить и использовать PostgreSQL в приложении на Django. Мы пройдём весь путь: установка, создание базы, подключение через psycopg2, миграции, тестирование CRUD (создание, чтение, обновление, удаление) и базовая эксплуатация в продакшен-сценариях.

Содержание

  • Установка PostgreSQL на систему
  • Создание базы данных и базовые команды psql
  • Структура PostgreSQL вкратце
  • Установка Django и psycopg2
  • Создание проекта и приложения Django
  • Подключение базы к проекту
  • Миграции и проверка
  • Тестирование CRUD в Django shell
  • Почему выбирать PostgreSQL
  • Альтернативы и ситуации, когда Postgres — не лучший выбор
  • Практические чек-листы, безопасность и резервное копирование
  • Критерии приёмки и тест-кейсы
  • Короткое объявление для команды

1. Установка PostgreSQL на Ubuntu

Ниже приведены инструкции для Ubuntu. Если вы используете Windows или macOS, следуйте официальной документации PostgreSQL для вашей ОС.

Сначала обновите индексы пакетов:

$ sudo apt-get update

Установите PostgreSQL и сопутствующие пакеты:

$ sudo apt-get install postgresql postgresql-contrib libpq-dev

При подтверждении установки введите Y.

Подключитесь к системному пользователю postgres:

$ sudo -i -u postgres

Проверьте установленную версию клиента psql:

postgres@nameofaccount:~$ psql --version

Выход может выглядеть так:

psql (PostgreSQL) 14.5 (Ubuntu 14.5-0ubuntu0.22.04.1)

Выйдите из учётной записи postgres:

postgres@nameofaccount:~$ exit

Важно: для продакшена используйте пакетный менеджер вашей ОС или официальные репозитории PostgreSQL — они дают более свежие сборки.

2. Создание базы данных

Перейдите в оболочку Postgres и создайте базу данных, которую вы будете использовать в Django-проекте:

$ sudo -i -u postgres
$ psql
postgres=# create database new_db;
postgres=# \l

При успешном создании сервер вернёт CREATE DATABASE. Команда \l перечисляет базы данных.

Структура PostgreSQL

Postgres — реляционная СУБД: данные хранятся в таблицах (tables). Таблица состоит из столбцов (columns) и строк (rows). У каждой строки обычно есть первичный ключ (primary key) — уникальный идентификатор. Внешние ключи (foreign key) связывают таблицы между собой и определяют отношения.

Понимание модели данных приложения (сущности, связи, ограничения) важно до проектирования таблиц и индексов.

3. Установка Django и библиотеки psycopg2

Для связи Django и PostgreSQL нужен адаптер libpq — в Python это пакет psycopg2.

Рекомендация: для разработки можно использовать psycopg2-binary (простая установка), для продакшена — psycopg2 (компиляция с системным libpq). Пример установки через pipenv:

$ pipenv install psycopg2-binary Django

Или, если вы предпочитаете psycopg2 (prod):

$ pipenv install psycopg2 Django

Успешная установка psycopg2 в терминале

Примечание: на некоторых системах перед установкой psycopg2 требуется libpq-dev и python-dev-пакеты (установлены командой apt-get install libpq-dev python3-dev).

4. Создание проекта и приложения Django

Создадим проект и приложение. Например, создайте папку и инициализируйте проект:

$ mkdir Boma-watch
$ cd Boma-watch
$ django-admin startproject myboma .

Обратите внимание на точку в конце: она создаёт проект в текущей папке.

Создайте приложение boma (в корне проекта) командой:

$ python manage.py startapp boma

Если вы не работали с Django раньше, начните с официального руководства по Django.

5. Подключение базы к проекту

Шаг 1: Измените настройки проекта для Postgres

Откройте myboma/settings.py и замените секцию DATABASES на конфигурацию Postgres. Пример безопасной конфигурации (рекомендуется хранить секреты в переменных окружения):

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('DB_NAME', 'new_db'),
        'USER': os.getenv('DB_USER', 'morine'),
        'PASSWORD': os.getenv('DB_PASSWORD', 'password'),
        'HOST': os.getenv('DB_HOST', 'localhost'),
        'PORT': os.getenv('DB_PORT', '5432'),
    }
}

Замените DB_USER и DB_PASSWORD на реальные учётные данные. Храните пароли в защищённых переменных окружения или менеджере секретов.

Важно: в продуктивной среде не храните пароли в settings.py в виде явного текста.

Шаг 2: Обновите часовой пояс

В settings.py укажите строковое значение TIME_ZONE:

TIME_ZONE = 'Africa/Nairobi'

Django по умолчанию использует UTC; укажите ваш часовой пояс при необходимости.

Шаг 3: Создайте модель

В приложении boma в файле models.py создайте модель Profile:

from django.db import models

class Profile(models.Model):
    name = models.CharField(max_length=30)
    bio = models.TextField(max_length=100)

    def __str__(self):
        return self.name

Шаг 4: Выполните миграции

Сначала создайте миграции для приложения, затем примените их:

(virtual)$ python manage.py makemigrations boma
(virtual)$ python manage.py migrate

После успешной миграции вы увидите, что таблицы созданы.

Успешная миграция моделей Django в базу данных

Команда migrate просматривает INSTALLED_APPS и запускает SQL для создания таблиц, индексов и ограничений.

6. Тестирование CRUD в проекте

Откройте Django shell:

(virtual)$ python manage.py shell

Создание (Create)

from boma.models import Profile
prof1 = Profile.objects.create(name='Ken', bio='I am a Scorpio')
prof1.save()

Чтение (Read)

Profile.objects.all()  # -> QuerySet с объектами
Profile.objects.get(pk=1)  # -> один объект по первичному ключу

Обновление (Update)

Profile.objects.filter(id=1).update(name='Kim')  # вернёт число обновлённых строк
Profile.objects.filter(id=1)  # проверьте изменения

Удаление (Delete)

Profile.objects.filter(id=1).delete()  # вернёт кортеж (число, подробности)
Profile.objects.filter(id=1)  # пустой QuerySet

Критерии приёмки

  • Модель Profile создаётся и отображается в админке (если включена).
  • Созданные объекты сохраняются в Postgres и доступны через ORM.
  • Миграции применяются без ошибок.

Почему выбирать PostgreSQL

Postgres — зрелая, расширяемая и надёжная СУБД. Причины выбора:

  • Совместимость с большинством языков и ОС.
  • Поддержка расширенных типов (JSONB, ARRAY, UUID, GEOMETRY через PostGIS).
  • Богатые возможности индексации и оптимизации запросов.
  • Активное сообщество и постоянные улучшения (open-source).

Когда Postgres может быть избыточен: очень маленькие проекты или одиночные сценарии разработки, где SQLite проще в настройке; для горизонтально масштабируемых распределённых транзакций можно рассмотреть NewSQL/распределённые СУБД.

Альтернативы и когда они лучше

  • SQLite: для простых локальных или тестовых приложений.
  • MySQL / MariaDB: если инфраструктура уже стандартизирована на них.
  • Управляемые СУБД (AWS RDS, Google Cloud SQL, Azure Database): когда вы хотите снять с себя операционную нагрузку.
  • CockroachDB, Yugabyte: для распределённых транзакций и автоматического шардинга.

Практические советы по безопасности и эксплуатации

Важно: не оставляйте базу открытой в сети.

  • Ограничьте доступ в pg_hba.conf: разрешайте подключения только с доверенных хостов.
  • Включите SSL/TLS для клиентских подключений (включая Django DATABASES OPTIONS с sslmode=’require’).
  • Используйте надёжные пароли или аутентификацию через сертификаты и IAM в облаке.
  • Регулярно обновляйте PostgreSQL и OS-пакеты.
  • Настройте бэкапы: pg_dump и pg_basebackup для полных снимков.
  • Шифруйте диски на уровне ОС или используйте встроенное шифрование в облаке.

Пример резервного копирования и восстановления (логическое):

$ pg_dump -U postgres -h localhost -Fc new_db > new_db.dump
$ pg_restore -U postgres -h localhost -d restored_db new_db.dump

Миграции и CI/CD рекомендации

  • Миграции должны быть версионированы и запускаться в CI перед релизом.
  • Тестовая база должна быть отдельной и воспроизводимой.
  • В продакшене перед применением миграций сделайте резервную копию; для крупных таблиц планируйте миграции с минимальным простоя.

Мини-методология миграции

  1. Подготовьте миграции в ветке фичи.
  2. Прогоните миграции на staging с теми же настройками базы.
  3. Выполните резервную копию продакшена.
  4. Примените миграции и проверочные запросы.

Тест-кейсы и критерии приёмки

  • Создать профиль через ORM и проверить присутствие в базе.
  • Обновить поле name и убедиться, что изменилось в базе.
  • Удалить запись и убедиться, что она отсутствует.
  • Проверить, что миграции не меняют данные непреднамеренно.

Примеры тестов для автоматизации в Django (pytest или unittest) должны покрывать CRUD и миграции.

Чек-листы по ролям

Dev:

  • Добавил модель и миграции.
  • Написал unit-тесты CRUD.
  • Не хардкодит секреты в settings.py.

DevOps/Инженер:

  • Настроил SSL для Postgres.
  • Добавил автоматические бэкапы и мониторинг.
  • Ограничил доступ по сети (firewall, pg_hba.conf).

DBA:

  • Настроил репликацию/точки восстановления.
  • Планирует вакуумы и анализы (VACUUM, ANALYZE).
  • Настроил политики резервного копирования и проверки целостности.

Decision flowchart (решение использовать Postgres)

flowchart TD
  A[Нужна реляционная СУБД?] -->|Да| B{Требуются расширенные типы или индексы?}
  A -->|Нет| Z[Используйте альтернативы 'NoSQL/SQLite']
  B -->|Да| C[PostgreSQL]
  B -->|Нет| D{Проще ли SQLite?}
  D -->|Да| E[SQLite для локальной разработки]
  D -->|Нет| C
  C --> F[Рассмотрите управляемый Postgres в облаке]

Совместимость, миграции и тонкие места

  • При переносе с SQLite на Postgres проверяйте соответствие типов и уникальных ограничений.
  • Для внешних ключей убедитесь, что данные консистентны.
  • В больших таблицах изменение типа столбца может быть дорогой операцией — используйте поэтапные миграции.

Безопасность данных и соответствие требованиям персональных данных

Если вы храните персональные данные, следуйте принципам минимизации и псевдонимизации. Настройте ротацию ключей и доступ по принципу наименьших привилегий. Для соответствия требованиям (например, GDPR) используйте политики хранения и удаления данных.

Когда Postgres не подходит

  • Очень мелкие однофайловые проекты: SQLite проще.
  • Жёсткие требования к линейной масштабируемости запись/чтение на глобально распределённой системе: рассмотрите распределённые СУБД.

Короткое объявление для команды (100–200 слов)

Мы подключили PostgreSQL к проекту Django (myboma). База new_db создана на локальном сервере, настроен адаптер psycopg2, миграции применены, проверены CRUD-операции. Пароли не хардкодятся — используются переменные окружения. Планы: настроить резервное копирование с pg_dump, включить SSL и ограничить доступ на уровне сети. Разработчики: добавляйте тесты для моделей и используйте локальную копию базы при тестировании. DevOps: подготовить скрипты автоматических бэкапов и мониторинга.

Итог

  • Вы установили Postgres, создали базу и подключили её к Django через psycopg2.
  • Выполнили миграции и протестировали CRUD-операции.
  • Получили рекомендации по безопасности, бэкапам и продакшен-операциям.

Важно: перед развёртыванием в продакшен обязательно протестируйте миграции на staging и настройте резервное копирование.

Ключевые ссылки и команды сохраните в README проекта и в скриптах автоматизации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство