Настройка PostgreSQL для разработки web-приложения на Python

programming

Опубликован:
2024-12-17T11:51:25.335718Z
Отредактирован:
2024-12-17T11:51:25.335718Z
Статус:
публичный
15
0
0

Разработка web-приложения на Python и Starlette, именно этот процесс мы исследуем в этом цикле статей, стремительно приближается к очередному этапу, требующему частого, многократного сохранения данных на сервере. Сервер, как и любая другая вычислительная машина, умеет хранить данные двумя способами: в файлах или в базах данных. Хранение данных в файлах слишком затратно и неэффективно, ибо к этим данным впоследствии придётся очень часто обращаться множеством параллельных запросов. А это значит, что, чтобы успешно продолжить разработку, мне потребуется современная база данных в составе используемой разработчиком операционной системы. В этом выпуске цикла я покажу установку на десктоп Debian sid современной, функциональной и продвинутой базы данных PostgreSQL, начальную настройку пользователя, создание базы данных и тестовый сеанс в консоли SQL.

Подготовка операционной системы

Debian sid среда двольно подвижная и регулярно изменяющаяся, а PostgreSQL компонент сложный. Перед установкой любой программы на Debian sid очень желательно полностью обновить операционную систему. Сделать это можно с помощью пакетного менеджера apt. Тонкости установки и настройки Debian sid мы рассматриваем в соседнем блоге, всех заинтересованных милости прошу туда...

Перед установкой PostgreSQL также желательно проверить, какая локаль установлена в сессии текущего пользователя, это можно сделать с помощью команды locale.

$ locale

Hp9UKWMLqd.jpg

В моей операционной системе установлена русскоязычная локаль UTF-8, при создании базы данных PostgreSQL наследует локаль операционной системы. Если в базе данных планируется хранить русскоязычные данные, а в локали установлена C.UTF-8, то после создания базы данных её придётся ещё и дополнительно настраивать. Правильная локализация операционной системы помогает избежать лишних телодвижений впоследствии.

Установка PostgreSQL

Установить PostgreSQL в любой ветке Debian можно при помощи пакетного менеджера apt, при этом необходимо, чтобы apt был подключен к любому официальному зеркалу. Команда для установки PostgreSQL выглядит следующим образом.

$ sudo apt install postgresql

Я умышленно не стал использовать в этой команде ключ -y, просто чтобы сделать и продемонстрировать следующий снимок экрана, но в обычной практике этот ключ бывает полезен.

lDej2qQn5V.jpg

Как видно на снимке экрана выше, для установки базы данных требуется 72.4MB дискового пространства, это без учёта дискового пространства, которое потребуется для хранения пользовательских баз. Жму enter, дожидаюсь завершения установки всех затребованных пакетов. Сразу после установки PostgreSQL готова к работе, статус процесса можно посмотреть следующей командой.

$ sudo systemctl status postgresql.service

WlmMm9CNh4.jpg

Не все время работы десктопа мы занимаемся web-разработкой, а база данных нужна только для этого. Состояние сервиса при старте компьютера можно изменить, вот как выглядит выполняющая это действие команда.

$ sudo systemctl disable postgresql.service

При этом, каждый раз приступая к работе над web-приложением, придётся запускать процесс PostgreSQL ручками, следующей командой.

$ sudo systemctl start postgresql.service

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

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

В начальном состоянии после установки в PostgreSQL зарегистрирован один единственный пользователь с именем postgres — суперпользователь базы данных. Работать с базой данных от его имени небезопасно и нецелесообразно. Это значит, что пользователя базы данных необходимо создать нового, с иголочки.

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

В состоянии "из коробки" в PostgreSQL право создавать пользователей принадлежит только суперпользователю. Чтобы создать пользователя базы данных, необходимо войти в систему от имени postrges, сделать это можно при помощи sudo.

$ sudo -i -u postgres

qJuXxd5itu.jpg

Как видно на снимке экрана выше, после выполнения предложенной команды приглашение командной строки изменило свой вид, и теперь в этом терминале я работаю от имени пользователя postgres.

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

$ createuser jazz -P -d --interactive

В этой команде ключ -P требует назначить новому пользователю пароль для входа, ключ -d даёт возможность новому пользователю создавать собственные базы данных, а ключ --interactive включает интерактивный режим для запроса необходимых параметров.

Pyos38EWFO.jpg

Как видно на снимке экрана выше, при создании новой роли программа запросила пароль для нового пользователя, при вводе пароль на терминале не отображается. Далее программа запросила повторный ввод пароля и сделала ещё пару запросов, на которые я ответил вводом символа n — отказом. Создаваемый пользователь не должен иметь полномочий суперпользователя и не должен иметь права создавать другие роли.

После того, как пользователь создан, сеанс postgres нужно закрыть.

$ exit

Всё, пользователь базы данных PostgreSQL с именем jazz создан, и с этого момента он может создавать собственные базы данных и безпрепятственно работать с ними.

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

Создать базу данных PostgreSQL очень просто, достаточно задать ей имя. Поскольку я работаю над приложением с именем website, а создаваемая база данных мне нужна для процесса разработки, даю ей соответствующее имя — websitedev.

$ createdb websitedev

miJhAyKlTK.jpg

База данных создана, но в ней пока нет таблиц, и, следовательно, нет данных. Для этой демонстрации я создам единственную таблицу. Реализовать это желание мне поможет текстовый файл с кодом SQL. Cоздаю с помощью текстового редактора Vim файл с именем website.sql.

$ vim website.sql

В этот файл вписываю следующий код.

CREATE TABLE users (
    id         serial PRIMARY KEY,
    username   varchar(16) UNIQUE NOT NULL,
    ugroup     varchar(16),
    registered timestamp,
    last_visit timestamp
);

INSERT INTO users (username, ugroup, registered, last_visit)
    VALUES ('avm4', 'Администраторы', 
            '2024-09-19 04:05:00', '2024-12-15 23:53:12.20784');

INSERT INTO users (username, ugroup, registered, last_visit)
    VALUES ('programming', 'Писатели',
            '2024-09-19 04:05:10', '2024-11-20 11:35:15.095004');

Здесь CREATE TABLE создаёт новую таблицу с именем users, а пара следущих далее INSERT-ов добавляют в эту таблицу две новые строки.

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

$ psql -d websitedev -f website.sql

V6SC5aWcdt.jpg

И теперь я могу войти в базу данных с именем websitedev.

$ psql -d websitedev

JeNUDlcElp.jpg

Как видно на снимке экрана выше, при входе не потребовалось вводить пароль, поскольку я вхожу с localhost, а имя текущего пользователя операционной системы совпадает с именем владельца базы данных websitedev. В итоге, я оказался в консоли SQL и могу вводить любые легитимные SQL-запросы, в приглашении командной строки этой консоли указано имя текущей базы данных. Давайте сделаем запрос и получим из таблицы users параметры хранящихся в ней данных пользователей.

websitedev=> SELECT id, username, ugroup, last_visit FROM users;

u31y7OctcU.jpg

Как видно на снимке экрана, база данных откликнулась на запрос и вывела запрошеные данные в виде таблицы. Далее, по мере разработки web-приложения, я буду очень часто обращаться к только что созданной базе данных прямыми текстовыми запросами, а пока все цели этой демонстрации достигнуты. Покидаю консоль SQL, внимание на следующий снимок экрана.

W1OEmXeO1a.jpg

Служебные команды в консоли SQL исполняются с помощью обратного слэша, а выйти из неё можно с помощью команды \q. Сеанс окончен...

Подводим промежуточный итог

В операционной системе рабочего места web-разработчика появилась современная, эффективная и продвинутая база данных PostgreSQL. С этого момента разрабатываемое приложение начнёт очень стремительно меняться, и уже на ближайших этапах разработки обзаведётся собственной моделью, описывающей состав и параметры данных для решения поставленных техническим заданием целей. В одном из ближайших выпусков этого блога я покажу, как только что созданную базу данных с именем websitedev подключить в web-приложение на Python и Starlette.

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