15%

Збережіть 15% на всі хостинг-послуги

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

Використовуй код:

Skills
Почати
01.11.2024
11 +1

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
  • Структуровані типи: Масиви, Складені типи, Типи діапазонів
  • Типи документів: JSON та JSONB (бінарний JSON для швидшого запиту)
  • Мережеві типи: INET, CIDR, MACADDR — ідеальні для мережевих додатків
  • Геометричні типи: POINT, LINE, POLYGON — корисні для ГІС-додатків
  • UUID: Вбудована підтримка універсально унікальних ідентифікаторів
  • Повнотекстовий пошук (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 елегантно обробляє одночасний доступ через Контроль паралелізму з кількома версіями (MVCC):

  • MVCC: Замість блокування рядків під час читання, PostgreSQL створює снімок даних для кожної транзакції. Це дозволяє читачам та письменникам працювати одночасно без блокування один одного, що значно підвищує продуктивність при високому паралелізмі.
  • Відповідність ACID: Кожна транзакція в PostgreSQL повністю відповідає ACID:
  • Атомарність — транзакції або повністю завершуються, або взагалі не завершуються
  • Консистентність — дані завжди переходять з одного дійсного стану в інший
  • Ізоляція — одночасні транзакції не перешкоджають одна одній
  • Довговічність — затверджені дані пережи вають збої системи через журнал попередніх записів (WAL)
  • Точки збереження: Тонкий контроль транзакцій у межах одного блоку транзакцій
  • Двофазна фіксація (2PC): Підтримує розподілені транзакції на кількох вузлах бази даних

2.4. Функції безпеки

PostgreSQL включає можливості безпеки рівня підприємства:

  • Контроль доступу на основі ролей (RBAC) з детальним управлінням привілеями
  • Безпека на рівні рядків (RLS) — обмежте доступ до даних на рівні рядків для кожного користувача
  • Шифрування SSL/TLS для з’єднань у транзиті
  • Аутентифікація SCRAM-SHA-256 та MD5
  • pg_hba.conf — гнучка конфігурація аутентифікації на основі хоста

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

  • Потокова репліка: Репліка первинного на вторинне в реальному часі
  • Логічна репліка: Вибірково реплікуйте конкретні таблиці або публікації
  • Відновлення до точки в часі (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-сертифікатом, щоб зашифрувати всі дані в транзиті.

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_buffers128MB2GB (25% RAM)
effective_cache_size4GB6GB (75% RAM)
work_mem4MB64MB
maintenance_work_mem64MB512MB
max_connections100200 (використовуйте pgBouncer для більшого)
wal_buffers-1 (авто)64MB
###PPT_NO
15%

Збережіть 15% на всі хостинг-послуги

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

Використовуй код:

Skills
Почати