PostgreSQL: различия между версиями

Материал из sysadm
Перейти к навигации Перейти к поиску
Строка 79: Строка 79:
 
</pre>
 
</pre>
  
= Проверка подключения =
+
== Проверка подключения ==
  
 
<pre>
 
<pre>

Версия 02:32, 8 декабря 2025

Ссылки

Сторонние сборки

Обзор

PostgreSQL Community

Последний стабильный релиз PostgreSQL 18.1

Компоненты PostgreSQL

  • Основной процесс сервера (Postmaster) - Главный управляющий процесс, который запускает и координирует все остальные процессы PostgreSQL. Он отвечает за управление соединениями, восстановление после сбоев и поддержание общей работоспособности системы.
  • Фоновые процессы (Background Processes) - Различные процессы, работающие в фоновом режиме для выполнения основных задач, таких как:
    • Запись WAL (Write-Ahead Log) Writer - отвечает за запись из буферов памяти WAL (WAL Buffers) в файлы транзакционных логов (сегменты WAL) для обеспечения целостности данных.
    • Очистка Autovacuum Launcher/Worker - Автоматически запускает процессы VACUUM для очистки "мертвых" строк (удаленных или обновленных записей) и сбора статистики для оптимизатора запросов.
    • Контрольные точки (Checkpointer) - Периодически сбрасывает все измененные страницы данных из общей памяти на диск для обеспечения согласованности и минимизации времени восстановления.
    • Фоновые рабочие процессы (Background Workers) - Введены в более поздних версиях, используются для выполнения параллельных операций, например, при параллельном сканировании, параллельных индексах GIN и асинхронном I/O.
  • Бэкенд-процессы Backend Processes - Отдельный процесс, который создается postmaster'ом для обработки каждого клиентского соединения и выполнения запросов. Каждый процесс управляет синтаксическим анализом, планированием и выполнением SQL-запросов.
  • Разделяемая память (Shared Memory) - Область памяти, доступная для всех процессов PostgreSQL. Ключевые ее части:
    • Разделяемые буферы (Shared Buffers) - Основной кэш, где хранятся блоки данных, считанные с диска, для ускорения повторного доступа.
    • Буферы WAL (WAL Buffers) - Временное хранилище для записей WAL перед их записью на диск.
    • Кэш системных каталогов - Кэширование информации о структуре базы данных.
  • Физическое хранилище данных (Data Directory/Storage) - Каталог на диске, где хранятся все физические файлы базы данных, включая файлы данных (heap files), файлы индексов, файлы WAL и системные каталоги (системную метаинформацию).

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

Установка

Rocky Linux 10

  1. установите пакет официального репозитория PostgreSQL
  2. установите PostreSQL нужной версии
  3. Инизиализируйте базу
  4. Включите и запустите сервис
# повышение привилегий до root
sudo -s

# установка пакета официального репозитория
dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-10-x86_64/pgdg-redhat-repo-latest.noarch.rpm

dnf repolist
#---------------------------------------------------------------------------------------------------
...
pgdg-common   PostgreSQL common RPMs for RHEL / Rocky Linux / AlmaLinux 10 - x86_64
pgdg13        PostgreSQL 13 for RHEL / Rocky Linux / AlmaLinux 10 - x86_64
pgdg14        PostgreSQL 14 for RHEL / Rocky Linux / AlmaLinux 10 - x86_64
pgdg15        PostgreSQL 15 for RHEL / Rocky Linux / AlmaLinux 10 - x86_64
pgdg16        PostgreSQL 16 for RHEL / Rocky Linux / AlmaLinux 10 - x86_64
pgdg17        PostgreSQL 17 for RHEL / Rocky Linux / AlmaLinux 10 - x86_64
pgdg18        PostgreSQL 18 for RHEL / Rocky Linux / AlmaLinux 10 - x86_64
...
#---------------------------------------------------------------------------------------------------

dnf install postgresql18-server

# инициализация кластера баз данных (здесь слово кластер означает совокупность базы данных)
/usr/pgsql-18/bin/postgresql-18-setup initdb

systemctl enable postgresql-18
systemctl start postgresql-18
systemctl status postgresql-18

# проверка сервисной учетки postgres
id postgres
 uid=26(postgres) gid=26(postgres) группы=26(postgres)

passwd -S postgres
 postgres L 2025-12-05 -1 -1 -1 -1

# выход из root
exit

Проверка подключения

# вход под пользователем postgres
sudo su -l postgres

# подключение к кластеру баз данных
psql

#---------------------------------------------------------------------------------------------------
# список баз данных
postgres-# \l
                                                       Список баз данных
    Имя    | Владелец | Кодировка | Провайдер локали | LC_COLLATE  |  LC_CTYPE   | Локаль | Правила ICU |     Права доступа     
-----------+----------+-----------+------------------+-------------+-------------+--------+-------------+-----------------------
 postgres  | postgres | UTF8      | libc             | ru_RU.UTF-8 | ru_RU.UTF-8 |        |             | 
 template0 | postgres | UTF8      | libc             | ru_RU.UTF-8 | ru_RU.UTF-8 |        |             | =c/postgres          +
           |          |           |                  |             |             |        |             | postgres=CTc/postgres
 template1 | postgres | UTF8      | libc             | ru_RU.UTF-8 | ru_RU.UTF-8 |        |             | =c/postgres          +
           |          |           |                  |             |             |        |             | postgres=CTc/postgres
(3 строки)

# список табличных пространств
# столбец "Расположение" показывает путь к данным ТП, если этот путь отличается от базового каталога данных
postgres=# \db             
     Список табличных пространств
    Имя     | Владелец | Расположение 
------------+----------+--------------
 pg_default | postgres | 
 pg_global  | postgres | 
(2 строки)

# базовый каталог данных
postgres=# show data_directory;
     data_directory     
------------------------
 /var/lib/pgsql/18/data
(1 строка)


# выход
postgres-# \q
#---------------------------------------------------------------------------------------------------

Табличные пространства

Физическая структура табличного пространства

физически табличное пространство это каталог, содержащий подкаталоги баз, в которых содержатся файлы сегментов

/path/to/my_space/ 
    ├── 6354/  <-- OID конкретной базы данных (например, mydb)
    │      ├── 12345   <-- файл форка main, сегмент 1 (1 ГБ)
    │      ├── 12345.1 <-- файл форка main, сегмент 2 (1 ГБ)
    │      ├── 12345_vm <-- файл форка vm, сегмент 1 (1 ГБ)
    │      ├── 12345_fsm <-- файл форка fsm, сегмент 1 (1 ГБ)
    │      └── 12326 <-- файл форка main, сегмент 1 (1 ГБ)
    │      └── 12326_init <-- файл форка init, сегмент 1 (1 ГБ)
    └── 6355/  <-- OID другой базы данных
        └── ... 

Важные особенности

  • в одном табличном пространстве может располагаться несколько баз данных
  • одна база данных может располагаться в нескольких табличных пространствах

Структура объекта

  • объект (таблица,индекс,...) - логическое понятие, состоит из форков
  • форк - логическое понятие, состоит из файлов сегментов и может быть нескольких типов
    • форк main содержит данные объекта и состоит из файлов сегментов <oid>,<oid>.1,...
    • форк vm (Visibility Map) содержит мета данные о видимости строк на странциах и состоит из файлов сегментов <oid>_vm,<oid>_vm.1,...
    • форк fsm (Free Space Map) содержит метаданные о свободном месте на странциах и состоит из файлов сегментов <oid>_fsm,<oid>_fsm.1,...
    • форк init содержит метаданные для быстрого восстановления не журналируемых объектов, состоит из файлов сегментов <oid>_init,<oid>_init.1,...
  • сегмент - физический файл, имеет заголовок и состоит из страниц (блоков) фиксированного размера, по умолчанию 8Кб (размер блока можно указать при сборке PostgreSQL)

Резервирование

Физическое резервное копирование

  • pg_basebackup - стандартная утилита для создания полной физической копии всего каталога данных кластера
    • Создает согласованную базовую резервную копию, которую можно использовать в сочетании с архивированием журналов предзаписи (WAL) для восстановления на любой момент времени PITR (Point-In-Time Recovery)
    • Поддерживает потоковую передачу данных и различные форматы (plain, tar, directory)
  • Сторонние инструменты
    • pg_probackup
    • pgBackRest
    • Barman
  • Снимки (snapshot) на уровне файловой системы
    • для этого база должна быть либо остановлена (холодный бэкап)
    • либо переключена в режим резервного копирования pg_start_backup(), pg_stop_backup()

Логическое резервное копирование

  • pg_dump - дамп отдельной базы в виде sql скрипта, выполнение которого полностью восстанавливает структуру и данные базы
  • pg_dumpall - дамп всего кластера баз данных в виде sql скрипта, выполнение которого полностью восстанавливает структуру и данные всех баз кластера, включая табличные пространства роли и прочие объекты кластера
  • команда copy