Оглавление
Сравнение SQLite, PostgreSQL, MySQL
Запускаем PostgreSQL с помощью Docker
Варианты развертывания PostgreSQL
PostgreSQL
Изучаем СУБД PostgreSQL
PostgreSQL («постгрес-ку-эль») — это объектно-реляционная система баз данных с открытым исходным кодом, которая использует и расширяет язык SQL в сочетании со многими функциями, которые безопасно хранят и масштабируют самые сложные рабочие нагрузки данных.
Особенности
PostgreSQL заслужил свою репутацию за проверенную архитектуру, надежность, целостность данных, большой набор функций и расширяемость. PostgreSQL работает на всех основных операционных системах и имеет мощные дополнения. Так написано в документации к базе данных.
История возникновения
Первая версия СУБД была выпущена в 1989 году. База данных совершенствовалась на протяжении нескольких лет, а в 1993 году, когда вышла версия 4.2, проект был закрыт. Но несмотря на официальное прекращение, открытый код позволил другим разработчикам взяться за его дальнейшее развитие. Они заменили язык запросов POSTQUEL на ставший к тому времени общепринятым SQL, а проект получил название Postgres95. К 1996 году стало ясно, что название Postgres95 не выдержит испытание временем, и было выбрано новое имя — PostgreSQL, которое отражает связь и с оригинальным проектом POSTGRES и с переходом на SQL. Именно поэтому PostgreSQL произносится «постгрес-ку-эль» или просто «постгрес», но только не «постгре».
Преимущества PostgreSQL
1. **Объектно-реляционная СУБД.** Относительно реляционных СУБД введение объектно-ориентированного подхода дает разработчикам ряд новых возможностей, таких как создание новых типов, операторов и методов доступа, которые определяются пользователем. То есть мы можем определить кастомные типы данных и использовать их либо как атрибут таблицы, либо для вспомогательных операций и методов получения данных. В PostgreSQL поддерживаются сложные объекты, представляющие собой наборы других объектов. Также появилась возможность наследовать объекты базы данных друг от друга.
2. **Надежность.** PostgreSQL позволяет настраивать: - Резервирование, то есть сохранять копии данных вне основного места их хранения, чтобы у нас были бэкапы нашей базы. - Восстановление на заданный момент времени в прошлом для отката БД в случае непредвиденных ситуаций. - Различные виды репликации — синхронную, асинхронную, каскадную. Репликация — это процесс поддержания двух (или более) наборов данных в согласованном состоянии. Это важно, если вы хотите создать реплику БД на случай потери основной базы, распределить входные запросы между основной базой и ее репликами.
3. **Безопасность.** Что касается безопасности, СУБД позволяет работать по защищенному SSL-соединению. SSL обеспечивает безопасный канал связи между двумя машинами или устройствами, работающими через интернет или внутреннюю сеть. Также СУБД предоставляет большое количество методов аутентификации, таких как аутентификация по паролю, клиентским сертификатам, а также с помощью внешних сервисов. Для каждого пользователя БД настраивается разграничение доступа к объектам, присваиваются роли доступа.
4. **Поддержка транзакционности.** Этот материал сложный и объемный, поэтому не будем его описывать. Но если вам интересно, подробнее про транзакционность можно почитать здесь: https://habr.com/ru/amp/post/555920/
5. **Масштабируемость и производительность СУБД.** PostgreSQL эффективно использует современную архитектуру многоядерных процессоров — его производительность растет практически линейно с увеличением количества ядер. В версиях, начиная с 9.6, СУБД может параллельно читать данные, соединять их и выполнять агрегации, что еще больше повышает возможности использования аппаратных средств для ускорения операций. Сюда же можно отнести кросс-платформенность, доступность, поддержку JSON и геометрических форматов данных, большое сообщество.
Сравнение SQLite, PostgreSQL, MySQL
Обратите внимание на критерий SQL-совместимости. MySQL не пытается полностью реализовать стандарты SQL, она не является полностью совместимой с SQL. Из-за этого могут возникнуть проблемы при интеграции с другими РСУБД. То есть у СУБД есть свои особенности синтаксиса, которые отличаются от стандарта SQL.
Запускаем PostgreSQL с помощью Docker
Запустим СУБД с помощью Docker и подключимся к ней через интерфейс PyСharm. Рассмотрим конфигурационный файл для запуска СУБД и основные атрибуты настроек. На Docker Hub есть официальный образ СУБД с хорошей документацией: *https://hub.docker.com/_/postgres.*
Варианты развертывания PostgreSQL
1. Через Docker
docker run --name skypro-postgres -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres# Параметр --name дает название контейнеру# Параметр -d запускает контейнер в фоновом режиме# Параметр -e – прокидывает переменные окружения внутрь контейнера# Параметр -p - проброс портов внутрь контейнера# Для образа postgres существует много переменных окружения, с помощью которых# его можно настраивать. Но нам потребуется два:# POSTGRES_PASSWORD – пароль для пользователя postgres# POSTGRES_DB – название базы данных внутри сервера postgres
2. Через Docker Compose
version: '3.8'
services:
postgres:
image: postgres
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- '5432:5432'
volumes:
- ./db/:/var/lib/postgresql/data
Здесь мы заменили временное хранилище /tmp на папку в корне проекта ./db.
Попробуем подключиться к нашей СУБД через PyСharm. Сперва создадим тестовую БД и таблицу. Подключимся к терминалу через psql:
postgres=# create database test_db;
CREATE DATABASE
postgres=# \c test_db
You are now connected to database "test_db" as user "postgres".
test_db=# create table test_table (id integer primary key, name varchar(255) null);
CREATE TABLE
test_db=# insert into test_table (id,name) values (1,'test_name');
INSERT 0 1
В интерфейсе PyCharm заходим в Tools/Database. Выбираем новый источник (Data Source).