Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Linux Адміністрація

PostgreSQL Повний Посібник: Встановлення, Конфігурація та Основні Функції

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

Цей комплексний посібник охоплює все, що вам потрібно знати: що таке PostgreSQL, його видатні функції, як встановити його на Ubuntu та як виконувати основні операції з базою даних, щоб швидко розпочати роботу.

1. Що таке PostgreSQL?

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

Вперше випущений у 1996 році та підтримуваний активною спільнотою з відкритим кодом, PostgreSQL став зрілим, готовим до виробництва механізмом бази даних, який прямо конкурує з комерційними рішеннями, такими як 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 включає можливості безпеки корпоративного рівня:

Role-based access control (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
Цей розділ проведе вас через повне, готове до виробництва встановлення 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 Certificate, щоб зашифрувати всі дані при передачі.
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. Hosting PostgreSQL: Choosing the Right Infrastructure
The performance and reliability of your PostgreSQL deployment depend heavily on the underlying infrastructure. Here are the best hosting options depending on your workload:
For Development and Small Applications
Shared Web Hosting provides an affordable entry point for small projects. However, for database-intensive applications, dedicated resources are strongly recommended.
For Production Web Applications
A VPS Hosting plan gives you dedicated CPU and RAM, full root access, and the ability to tune PostgreSQL configuration parameters — essential for production-grade database performance. AlexHost VPS plans are available with NVMe SSD storage, which dramatically reduces PostgreSQL I/O latency.
If you prefer a managed control panel experience, VPS with cPanel simplifies server management while still giving you access to your PostgreSQL instance.
For High-Traffic and Enterprise Workloads
Dedicated Servers from AlexHost provide maximum performance with no resource sharing. This is the ideal choice for large PostgreSQL deployments handling millions of transactions per day, complex analytical queries, or high-availability replication setups.
For AI and Machine Learning Workloads
If you're using PostgreSQL alongside machine learning pipelines (e.g., with pgvector for vector similarity search), GPU Hosting from AlexHost offers the computational power needed for AI-driven data processing.
8. Контрольний список затвердження безпеки
Перед розгортанням PostgreSQL у виробництві пройдіть цей контрольний список безпеки:

[ ] Змініть пароль за замовчуванням postgres: ALTER USER postgres WITH PASSWORD 'NewStrongPassword!';
  • [ ] Вимкніть віддалений доступ для суперкористувача у pg_hba.conf
  • [ ] Використовуйте спеціалізовані ролі з мінімальними привілеями для кожного додатка
  • [ ] Увімкніть SSL-з’єднання у postgresql.conf: ssl = on
  • [ ] Налаштуйте правила брандмауера, щоб обмежити порт 5432 лише відомими IP-адресами
  • [ ] Увімкніть Row-Level Security (RLS) для багатотенантних додатків
  • [ ] Регулярно перевіряйте привілеї користувачів: du та dp
  • [ ] Тримайте PostgreSQL в актуальному стані, щоб отримувати патчі безпеки
  • [ ] Моніторьте журнали у /var/log/postgresql/ на предмет підозрілої активності
  • [ ] Реалізуйте автоматизовані резервні копії з позасайтовим сховищем
  • Висновок

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

    Дотримуючись цього посібника, ви навчилися:

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

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