Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux Администрация

PostgreSQL Полное руководство: Установка, конфигурация и основные возможности

PostgreSQL — это одна из самых мощных систем управления реляционными базами данных (RDBMS) с открытым исходным кодом, доступных на сегодняшний день. Известная своей стабильностью, расширяемостью и соответствием стандартам SQL, она пользуется доверием разработчиков, инженеров данных и предприятий по всему миру для управления большими и сложными наборами данных с уверенностью. Независимо от того, создаёте ли вы веб-приложение, хранилище данных или бэкенд микросервисов, PostgreSQL обеспечивает производительность и надёжность, которые требует ваш проект.

Это подробное руководство охватывает всё, что вам нужно знать: что такое PostgreSQL, его выдающиеся особенности, как установить его на Ubuntu и как выполнять основные операции с базами данных, чтобы быстро начать работу.

1. Что такое PostgreSQL?

PostgreSQL — часто называемый "Postgres" — это объектно-реляционная система управления базами данных (ORDBMS), которая расширяет возможности традиционных реляционных баз данных. В отличие от более простых SQL-движков, PostgreSQL поддерживает продвинутые типы данных (включая JSON, массивы и hstore), процедурные языки и определяемые пользователем функции, что делает его подходящим для широкого спектра применения — от простых веб-приложений до сложных аналитических нагрузок.

Впервые выпущенный в 1996 году и поддерживаемый активным сообществом открытого исходного кода, PostgreSQL превратился в готовую к использованию в production базу данных, которая напрямую конкурирует с коммерческими решениями, такими как Oracle и Microsoft SQL Server — без каких-либо затрат на лицензирование.

Почему выбрать PostgreSQL вместо других баз данных?

ФункцияPostgreSQLMySQLSQLite
Соответствие ACID✅ Полное✅ Частичное✅ Ограниченное
Поддержка JSON✅ Встроенная✅ Базовая
Пользовательские типы данных✅ Да❌ Нет❌ Нет
Полнотекстовый поиск✅ Встроенный✅ Базовый
Расширяемость✅ Высокая⚠️ Средняя❌ Низкая
Параллелизм (MVCC)✅ Да⚠️ Ограниченный❌ Нет

2. Ключевые особенности PostgreSQL

Понимание того, что делает PostgreSQL исключительным, поможет вам использовать его полный потенциал в вашей инфраструктуре.

2.1. Продвинутые типы данных

PostgreSQL поддерживает исключительно широкий спектр встроенных типов данных, намного превосходящий то, что предлагают большинство баз данных:

  • Примитивные типы: INTEGER, NUMERIC, VARCHAR, BOOLEAN, DATE, TIMESTAMP
  • Структурированные типы: Arrays, Composite types, Range types
  • Типы документов: JSON и JSONB (двоичный JSON для более быстрого запроса)
  • Сетевые типы: INET, CIDR, MACADDR — идеальны для сетевых приложений
  • Геометрические типы: POINT, LINE, POLYGON — полезны для GIS приложений
  • UUID: Встроенная поддержка универсально уникальных идентификаторов
  • Full-Text Search (FTS): Встроенные типы tsvector и tsquery обеспечивают мощный полнотекстовый поиск с поддержкой языков без внешних инструментов

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

2.2. Расширяемость

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

  • Пользовательские функции и хранимые процедуры: Напишите бизнес-логику непосредственно в базе данных, используя PL/pgSQL, PL/Perl, PL/Python, PL/Tcl или даже PL/V8 (JavaScript)
  • Пользовательские операторы и агрегаты: Определите свои собственные операторы, адаптированные к вашим типам данных
  • Расширения: Экосистема расширений PostgreSQL обширна. Популярные расширения включают:
PostGIS — продвинутая поддержка геопространственных данных
pg_stat_statements — мониторинг производительности запросов
pgcrypto — криптографические функции
uuid-ossp — генерация UUID
TimescaleDB — оптимизация временных рядов

2.3. Параллелизм и управление транзакциями
PostgreSQL элегантно обрабатывает параллельный доступ через Multi-Version Concurrency Control (MVCC):

MVCC: Вместо блокировки строк при чтении PostgreSQL создает снимок данных для каждой транзакции. Это позволяет читателям и писателям работать одновременно без блокировки друг друга, что значительно повышает производительность при высокой параллельности.
ACID соответствие: Каждая транзакция в PostgreSQL полностью соответствует ACID:
Атомарность — транзакции либо полностью завершаются, либо не завершаются вообще
Согласованность — данные всегда переходят из одного допустимого состояния в другое
Изоляция — параллельные транзакции не влияют друг на друга
Долговечность — зафиксированные данные сохраняются при сбоях системы благодаря Write-Ahead Logging (WAL)
Savepoints: Детальное управление транзакциями в рамках одного блока транзакций
Two-Phase Commit (2PC): Поддерживает распределенные транзакции между несколькими узлами базы данных

2.4. Функции безопасности
PostgreSQL включает возможности безопасности корпоративного уровня:

Управление доступом на основе ролей (RBAC) с детальным управлением привилегиями
Row-Level Security (RLS) — ограничение доступа к данным на уровне строк для каждого пользователя
SSL/TLS шифрование для соединений в пути передачи
SCRAM-SHA-256 и MD5 аутентификация
pg_hba.conf — гибкая конфигурация аутентификации на основе хоста

2.5. Высокая доступность и репликация

Streaming Replication: Репликация в реальном времени с основного сервера на реплику
Logical Replication: Выборочная репликация определенных таблиц или публикаций
Point-in-Time Recovery (PITR): Восстановите вашу базу данных на любой конкретный момент времени, используя архивы WAL
Поддержка отказоустойчивости: Совместимость с инструментами, такими как Patroni, repmgr и pgBouncer для пулинга соединений

3. Установка PostgreSQL на Ubuntu
В этом разделе описана полная, готовая к использованию в production установка PostgreSQL на Ubuntu 22.04 LTS. Те же шаги применимы к Ubuntu 20.04 с незначительными вариациями.
> Предварительные требования: сервер, работающий на Ubuntu 22.04 LTS с привилегиями sudo. Если вам нужна надежная серверная среда, рассмотрите VPS Hosting от AlexHost — идеален для запуска рабочих нагрузок базы данных с гарантированными ресурсами и полным доступом root.
Шаг 1: Обновление индекса пакетов
Всегда начинайте с обновления списков пакетов, чтобы убедиться, что вы устанавливаете последнюю доступную версию:
sudo apt update && sudo apt upgrade -y
Шаг 2: Установка PostgreSQL
Установите PostgreSQL вместе с пакетом postgresql-contrib, который включает дополнительные утилиты и расширения:
sudo apt install postgresql postgresql-contrib -y
Это устанавливает PostgreSQL 14 (или последнюю версию, доступную в репозитории Ubuntu). Чтобы установить конкретную версию (например, PostgreSQL 16) из официального репозитория PostgreSQL APT, используйте следующее:
# Add the PostgreSQL APT repository
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the signing key
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg

# Update and install
sudo apt update
sudo apt install postgresql-16 -y
Шаг 3: Запуск и включение сервиса PostgreSQL
После установки запустите сервис и настройте его на автоматический запуск при загрузке системы:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Шаг 4: Проверка установки
Убедитесь, что PostgreSQL работает правильно:
sudo systemctl status postgresql
Ожидаемый результат:
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
     Active: active (running) since ...
Вы также можете проверить установленную версию:
psql --version
# Output: psql (PostgreSQL) 16.x
Шаг 5: Настройка PostgreSQL для удаленного доступа (опционально)
По умолчанию PostgreSQL прослушивает только localhost. Чтобы разрешить удаленные соединения (например, с вашего сервера приложений), отредактируйте основной файл конфигурации:
sudo nano /etc/postgresql/16/main/postgresql.conf
Найдите и измените эту строку:
listen_addresses = 'localhost'
Измените на:
listen_addresses = '*'
Затем обновите файл аутентификации на основе хостов:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Добавьте следующую строку, чтобы разрешить определенный диапазон IP (замените на ваш фактический диапазон IP):
host    all             all             192.168.1.0/24          scram-sha-256
Перезагрузите PostgreSQL, чтобы применить изменения:
sudo systemctl restart postgresql
> Примечание безопасности: всегда ограничивайте удаленный доступ известными IP-адресами и убедитесь, что ваш брандмауэр (UFW или iptables) настроен надлежащим образом. Используйте SSL сертификат вместе с вашим сервером базы данных для шифрования всех данных при передаче.
4. Базовое использование PostgreSQL
Теперь, когда PostgreSQL установлен, давайте рассмотрим основные операции, которые должны знать все администраторы и разработчики.
Шаг 1: Доступ к оболочке PostgreSQL
PostgreSQL создает системного пользователя по умолчанию postgres во время установки. Переключитесь на этого пользователя и откройте интерактивную оболочку:
sudo -i -u postgres
psql
Вы должны увидеть приглашение PostgreSQL:
postgres=#
Кроме того, вы можете получить доступ к оболочке напрямую без переключения пользователей:
sudo -u postgres psql
Шаг 2: Создание базы данных
Создайте новую базу данных для вашего приложения:
CREATE DATABASE mydatabase;
Проверьте, что она была создана:
l
Это выводит список всех баз данных на сервере.
Шаг 3: Создание пользователя (роли)
Создайте выделенного пользователя базы данных с безопасным паролем:
CREATE USER myuser WITH PASSWORD 'StrongP@ssw0rd!';
Лучшая практика: избегайте использования суперпользователя по умолчанию postgres для подключений приложений. Всегда создавайте выделенную роль с минимальными привилегиями.
Шаг 4: Предоставление привилегий
Предоставьте новому пользователю полный доступ к базе данных:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
Для более детального управления вы можете предоставить конкретные привилегии на отдельные схемы и таблицы:
-- Connect to the database first
c mydatabase

-- Grant usage on the public schema
GRANT USAGE ON SCHEMA public TO myuser;

-- Grant privileges on all existing tables
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myuser;

-- Ensure future tables are also accessible
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO myuser;
Шаг 5: Подключение к базе данных как новый пользователь
Выйдите из текущего сеанса и переподключитесь как новый пользователь:
q
Затем подключитесь напрямую:
psql -U myuser -d mydatabase -h localhost
Шаг 6: Создание таблиц и вставка данных
После подключения создайте вашу первую таблицу:
CREATE TABLE employees (
    id          SERIAL PRIMARY KEY,
    first_name  VARCHAR(50) NOT NULL,
    last_name   VARCHAR(50) NOT NULL,
    email       VARCHAR(100) UNIQUE NOT NULL,
    department  VARCHAR(50),
    salary      NUMERIC(10, 2),
    hired_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Вставьте несколько записей:
INSERT INTO employees (first_name, last_name, email, department, salary)
VALUES
    ('Alice', 'Johnson', 'alice@example.com', 'Engineering', 85000.00),
    ('Bob', 'Smith', 'bob@example.com', 'Marketing', 72000.00),
    ('Carol', 'Williams', 'carol@example.com', 'Engineering', 91000.00);
Запросите данные:
SELECT first_name, last_name, department, salary
FROM employees
WHERE department = 'Engineering'
ORDER BY salary DESC;
Шаг 7: Справочник основных команд psql




Команда
Описание




l
Список всех баз данных


c dbname
Подключение к базе данных


dt
Список всех таблиц в текущей базе данных


d tablename
Описание структуры таблицы


du
Список всех пользователей/ролей


i file.sql
Выполнение SQL из файла


timing
Переключение отображения времени выполнения запроса


q
Выход из psql


?
Справка по командам psql


h
Справка по командам SQL




5. Основы оптимизации производительности PostgreSQL
Стандартная установка PostgreSQL консервативна в использовании ресурсов. Для производственных сред настройка конфигурации значительно улучшает производительность.
Ключевые параметры в postgresql.conf
sudo nano /etc/postgresql/16/main/postgresql.conf




Параметр
По умолчанию
Рекомендуется (сервер с 8GB RAM)




shared_buffers
128MB
2GB (25% RAM)


effective_cache_size
4GB
6GB (75% RAM)


work_mem
4MB
64MB


maintenance_work_mem
64MB
512MB


max_connections
100
200 (используйте pgBouncer для большего)


wal_buffers
-1 (авто)
64MB


checkpoint_completion_target
0.9
0.9




Примените изменения, перезагрузив сервис:
sudo systemctl restart postgresql
Лучшие практики индексирования
Индексы критичны для производительности запросов:
-- B-tree index (default, for equality and range queries)
CREATE INDEX idx_employees_department ON employees(department);

-- Partial index (index only a subset of rows)
CREATE INDEX idx_high_earners ON employees(salary) WHERE salary > 80000;

-- Composite index (for multi-column queries)
CREATE INDEX idx_dept_salary ON employees(department, salary DESC);

-- GIN index (for full-text search and JSONB)
CREATE INDEX idx_fts ON articles USING GIN(to_tsvector('english', content));
6. Резервное копирование и восстановление
Защита данных является обязательной. PostgreSQL предоставляет надежные встроенные инструменты для резервного копирования и восстановления.
Логическое резервное копирование с pg_dump
# Backup a single database
pg_dump -U postgres -d mydatabase -F c -f /backups/mydatabase_$(date +%Y%m%d).dump

# Backup all databases
pg_dumpall -U postgres > /backups/all_databases_$(date +%Y%m%d).sql
Восстановление из резервной копии
# Restore a custom-format dump
pg_restore -U postgres -d mydatabase -F c /backups/mydatabase_20240101.dump

# Restore from SQL file
psql -U postgres -d mydatabase < /backups/all_databases_20240101.sql
Автоматизированный скрипт резервного копирования
#!/bin/bash
BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="mydatabase"

mkdir -p "$BACKUP_DIR"
pg_dump -U postgres -F c -d "$DB_NAME" -f "$BACKUP_DIR/${DB_NAME}_${DATE}.dump"

# Retain only the last 7 days of backups
find "$BACKUP_DIR" -name "*.dump" -mtime +7 -delete

echo "Backup completed: ${DB_NAME}_${DATE}.dump"
Добавьте это в cron для ежедневного автоматического резервного копирования:
crontab -e
# Add: 0 2 * * * /usr/local/bin/pg_backup.sh >> /var/log/pg_backup.log 2>&1
7. Хостинг PostgreSQL: выбор правильной инфраструктуры
Производительность и надежность вашего развертывания PostgreSQL во многом зависят от базовой инфраструктуры. Вот лучшие варианты хостинга в зависимости от вашей рабочей нагрузки:
Для разработки и небольших приложений
Общий веб-хостинг предоставляет доступный вход для небольших проектов. Однако для приложений, интенсивно использующих базы данных, настоятельно рекомендуются выделенные ресурсы.
Для производственных веб-приложений
План VPS Hosting предоставляет выделенные CPU и RAM, полный доступ root и возможность настройки параметров конфигурации PostgreSQL — необходимых для производственной производительности базы данных. Планы VPS AlexHost доступны с хранилищем NVMe SSD, которое значительно снижает задержку ввода-вывода PostgreSQL.
Если вы предпочитаете управляемый интерфейс панели управления, VPS с cPanel упрощает управление сервером, при этом давая вам доступ к вашему экземпляру PostgreSQL.
Для высоконагруженных и корпоративных рабочих нагрузок
Выделенные серверы от AlexHost обеспечивают максимальную производительность без совместного использования ресурсов. Это идеальный выбор для крупных развертываний PostgreSQL, обрабатывающих миллионы транзакций в день, сложных аналитических запросов или высокодоступных установок репликации.
Для рабочих нагрузок AI и машинного обучения
Если вы используете PostgreSQL вместе с конвейерами машинного обучения (например, с pgvector для поиска сходства векторов), GPU Hosting от AlexHost предоставляет вычислительную мощность, необходимую для обработки данных на основе AI.
8. Security Hardening Checklist
Before deploying PostgreSQL in production, run through this security checklist:

[ ] Change the default postgres password: ALTER USER postgres WITH PASSWORD 'NewStrongPassword!';
  • [ ] Disable remote access for the superuser in pg_hba.conf
  • [ ] Use dedicated roles with minimal privileges for each application
  • [ ] Enable SSL connections in postgresql.conf: ssl = on
  • [ ] Configure firewall rules to restrict port 5432 to known IPs only
  • [ ] Enable Row-Level Security (RLS) for multi-tenant applications
  • [ ] Regularly audit user privileges: du and dp
  • [ ] Keep PostgreSQL updated to receive security patches
  • [ ] Monitor logs at /var/log/postgresql/ for suspicious activity
  • [ ] Implement automated backups with off-site storage
  • Заключение

    PostgreSQL — это мировой класс, открытая система управления базами данных, которая сочетает надежность корпоративного программного обеспечения с гибкостью открытой платформы. От передовых типов данных и модели параллелизма MVCC до богатой экосистемы расширений и надежных функций безопасности, PostgreSQL создана для решения самых сложных задач управления данными.

    Следуя этому руководству, вы научились:

    • Устанавливать и настраивать PostgreSQL на Ubuntu
    • Создавать базы данных, пользователей и управлять привилегиями
    • Выполнять основные операции CRUD
    • Оптимизировать производительность для рабочих нагрузок в production
    • Реализовывать надежную стратегию резервного копирования и восстановления
    • Защищать ваш экземпляр PostgreSQL от распространенных угроз

    Следующий шаг — выбор правильной инфраструктуры для размещения вашей базы данных. Нужно ли вам экономичное решение VPS Hosting или высокопроизводительный Dedicated Server для корпоративных рабочих нагрузок, AlexHost предоставляет надежную высокопроизводительную инфраструктуру, которую заслуживает ваше развертывание PostgreSQL.