Установка базы данных PostgreSQL

⏱ 25 мин · 🧩 заданий: 5

Почему PostgreSQL

SQLite отлично подходит для разработки: база — один файл, ничего не нужно устанавливать. Но для продакшена у него ограничения: одновременно писать может только один процесс, нет полнотекстового поиска, проблемы с регистронезависимым поиском по кириллице.

PostgreSQL — мощная бесплатная СУБД, которую Django поддерживает лучше всех. В django.contrib.postgres есть специальные поля (ArrayField, HStoreField), полнотекстовый поиск, поиск по сходству — всё это мы используем в следующем уроке.

Установка

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install postgresql postgresql-contrib

macOS

brew install postgresql@16
brew services start postgresql@16

Windows

Скачайте установщик с postgresql.org. Запомните пароль пользователя postgres, который зададите при установке.

Docker (любая ОС)

docker run --name blog-db -e POSTGRES_USER=blog -e POSTGRES_PASSWORD=secret \
  -e POSTGRES_DB=blog -p 5432:5432 -d postgres:16

Одна команда — и база с пользователем готовы.

Пользователь и база

Подключаемся к PostgreSQL от имени администратора:

sudo -u postgres psql        # Linux
psql -U postgres             # macOS / Windows
CREATE USER blog WITH PASSWORD 'secret';
CREATE DATABASE blog OWNER blog ENCODING 'UTF8';
\q

Для каждого проекта — свой пользователь и своя база с минимальными правами.

Драйвер

pip install "psycopg[binary]"
pip freeze > requirements.txt

Настройки Django

Перед переключением сохраним данные из SQLite:

python manage.py dumpdata --exclude auth.permission --exclude contenttypes --indent 2 > mysite_data.json

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

Теперь mysite/settings.py:

import os

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.environ.get("DB_NAME", "blog"),
        "USER": os.environ.get("DB_USER", "blog"),
        "PASSWORD": os.environ.get("DB_PASSWORD"),
        "HOST": os.environ.get("DB_HOST", "localhost"),
        "PORT": os.environ.get("DB_PORT", "5432"),
    }
}

Пароль берём из переменной окружения:

export DB_PASSWORD=secret           # Linux / macOS
set DB_PASSWORD=secret              # Windows cmd
$env:DB_PASSWORD="secret"           # PowerShell

Или используйте файл .env и python-decouple — как в уроке про почту.

Миграции и загрузка данных

python manage.py migrate
python manage.py loaddata mysite_data.json

Запустите сервер — блог работает на PostgreSQL, все посты, комментарии и пользователи на месте.

Если loaddata ругается

Самые частые причины: забыли исключить contenttypes при dumpdata, или в JSON попали данные приложений, которые не установлены. Можно выгружать только нужные приложения: dumpdata blog auth.user taggit.

Полезные команды psql

Команда Что делает
\l список баз
\c blog подключиться к базе
\dt список таблиц
\d blog_post структура таблицы
\q выход

Подключиться к базе проекта через Django: python manage.py dbshell.

Итог

  • PostgreSQL — стандарт для Django в продакшене.
  • Создаём отдельного пользователя и базу, ставим драйвер psycopg.
  • DATABASES["default"]["ENGINE"] = "django.db.backends.postgresql", секреты — из окружения.
  • Перенос: dumpdata → смена БД → migrate → loaddata.

Практика решено 0 из 5

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Ввод ответа

Какой пакет Python нужен Django для подключения к PostgreSQL? (имя для pip, современная версия)

Задание 2 Написать код

Настройте DATABASES для PostgreSQL: движок django.db.backends.postgresql, база blog, пользователь blog, пароль из переменной окружения DB_PASSWORD (через os.environ.get), хост localhost.

Задание 3 Расставить по порядку

Расставьте шаги переноса данных из SQLite в PostgreSQL.

  1. Переключить DATABASES на PostgreSQL
  2. python manage.py loaddata data.json
  3. python manage.py dumpdata --exclude auth.permission --exclude contenttypes --indent 2 > data.json (на SQLite)
  4. python manage.py migrate — создать таблицы в PostgreSQL
Задание 4 Несколько вариантов

Какие преимущества PostgreSQL перед SQLite важны для продакшена?

Задание 5 Ввод ответа

SQL-команда PostgreSQL для создания базы blog с владельцем blog (как в уроке). Напишите её.

Войдите, чтобы отмечать пройденные уроки.