PostgreSQL - NurOrNuLL/ESDP-AP-5-6-TEAM-2 GitHub Wiki

PostgreSQL

Введение

Django – это известный гибкий фреймворк, который используется для создания приложений на языке программирования Python. Обычно (по умолчанию) приложения на Django используют в качестве хранилища для своих файлов базу данных (БД) SQLite, которая отличается легковесностью и простотой. Несмотря на то, что иногда подобная связка работает вполне неплохо, для увеличения производительности рекомендуется использовать более традиционную систему управления базами данных (СУБД), к примеру, PostgreSQL.

Из данного руководства вы узнаете, как установить и настроить СУБД PostgreSQL для работы с приложением на Django. Здесь будут описаны все этапы: от установки необходимого программного обеспечения и создания учетных данных БД до запуска и настройки нового Django-приложения.

Требования

Перед тем, как приступить к установке, убедитесь, что у вас есть новый сервер, на котором установлена операционная система (ОС) Ubuntu 16.04, и создан новый пользователь (не суперпользователь), который может выполнять команды sudo.

Теперь авторизуйтесь в качестве этого пользователя и проступите к выполнению следующих инструкций.

Устанавливаем компоненты

Первым делом вы должны установить все необходимые компоненты из репозитория. В частности, установите pip (менеджер пакетов Python) для того, чтобы дальше вы могли установить и работать с компонентами Python. Также вам будет нужно установить программное обеспечение базы данных и библиотеки, необходимые для работы с ней.

Версии Python 2 и Python 3 имеют немного разные пакеты, поэтому ниже выберите команды, соответствующие той версии Python, которая используется в вашем проекте.

Если вы используете Python 2, введите:

$ sudo apt-get update
$ sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib

А если вы используете Python 3, выполните следующие команды:

$ sudo apt-get update
$ sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

После того, как вы установили необходимые компоненты, можно двигаться дальше к созданию базы данных и ее пользователя.

Создаем базу данных и пользователя

По умолчанию для локальных соединений PostgreSQL использует схему авторизации, которая называется “peer authentication” (можно перевести как «одноранговая авторизация»). Подобная схема позволяет провести авторизацию (без дальнейшей аутентификации) в случае, если имя пользователя ОС совпадает с именем действующего пользователя PostgreSQL.

Во время установки PostgreSQL создается пользователь ОС с именем postgres, которое соответствует имени администратора PostgreSQL. При помощи этого пользователя вы сможете выполнять административные задачи. Для того, чтобы авторизоваться под ним, вам необходимо выполнить команду sudo с ключом -u.

Начните сессию в PostgreSQL, используя команду:

$ sudo -u postgres psql

Первым делом вам нужно создать базу данных для вашего проекта на Django. Из соображений безопасности будет лучше, если каждый проект будет иметь свою собственную изолированную базу данных. Название базы данных должно быть описательным и вам понятным, но в данном руководстве в качестве примера будет использоваться база под названием myproject:

postgres=# CREATE DATABASE myproject;

Далее вам необходимо создать нового пользователя базы данных (myprojectuser) для того, чтобы подключиться к базе данных и взаимодействовать с ней. Обязательно установите длинный и сложный пароль:

postgres=# CREATE USER myprojectuser WITH PASSWORD 'password';

После этого вы должны изменить несколько параметров подключения для нового пользователя. Благодаря этому операции базы данных будут выполняться быстрее, а правильные параметры не придется задавать заново всякий раз при подключении к базе данных.

Установите UTF-8 в качестве кодировки по умолчанию (это необходимо для Django). Уровень изолированности транзакций нужно по умолчанию установить как “read committed” (чтение фиксированных данных) – этот уровень обеспечивает защиту от чернового чтения. Не забудьте про временную зону: изначально проекты на Django имеют установку UTC. Чтобы выполнить все изменения, нужно ввести следующие команды:

postgres=# ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
postgres=# ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE myprojectuser SET timezone TO 'UTC';

Теперь последнее, что необходимо сделать, это дать только что созданному пользователю права доступа к созданной базе:

postgres=# GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

Теперь выйдите из командной строки SQL, возвратившись к postgres сессии пользователя:

postgres=# \q

Настраиваем базу данных

Теперь, когда у вас есть свой проект, вам необходимо настроить его так, чтобы в нем использовалась та база данных, которую вы создали ранее.

Для этого нужно открыть файл с основными настройками проекта на Django, который находится в дочерней директории проекта:

(myprojectenv) $ nano ~/myproject/myproject/settings.py

Ближе к концу файла вы увидите секцию DATABASES, которая выглядит примерно так:

. . .

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.sqlite3',
 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 }
}

. . .

Согласно настройкам, на данный момент в проекте используется база данных SQLite; вам нужно изменить настройки так, чтобы использовалась база данных PostgreSQL.

Во-первых, измените бэкэнд базы данных (графа “engine”) так, чтобы вместо sqlite3 использовался postgresql_psycopg2. Далее в качестве используемой базы данных (графа “NAME”) пропишите название своей базы данных (в данном случае myproject). Также необходимо добавить учетные данные для входа в систему: понадобится имя пользователя, пароль и хост для подключения (графы “USER”, “PASSWORD”, “HOST”). Добавьте и графу, касающуюся порта (“PORT”), однако прописывать в ней ничего не нужно – в этом случае это будет обозначать настройку по умолчанию. В итоге блок с DATABASES должен выглядеть так:

. . .

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'NAME': 'myproject',
 'USER': 'myprojectuser',
 'PASSWORD': 'password',
 'HOST': 'localhost',
 'PORT': '',
 }
}

. . .

После всех необходимых изменений сохраните и закройте файл.