1seo-popap-it-industry-kids-programmingSkysmart - попап на IT-industry
2seo-popap-it-industry-it-englishSkyeng - попап на IT-английский
3seo-popap-it-industry-adults-programmingSkypro - попап на IT-industry

Установка PostgreSQL на Linux: пошаговое руководство

Для кого эта статья:
  • Системные администраторы и DevOps-инженеры, настраивающие серверы с PostgreSQL на Linux
  • Разработчики, которым нужно внедрить и оптимизировать PostgreSQL для приложений
  • IT-специалисты среднего уровня и выше, ищущие практическое руководство по установке и настройке PostgreSQL на разных дистрибутивах Linux
Установка Postgresql на Linux Пошаговое руководство
NEW

Практическое руководство по установке и настройке PostgreSQL на Linux: от первых шагов до оптимизации производительности.

PostgreSQL — это не просто СУБД. Это боевой инструмент, способный выдержать высокие нагрузки и обеспечить надежное хранение ваших данных. Когда я устанавливал PostgreSQL впервые, это казалось сложным. Теперь, после сотен развертываний, я могу сделать это с закрытыми глазами. В этом руководстве я поделюсь отточенным до автоматизма процессом установки PostgreSQL на Linux, который поможет вам избежать ошибок новичка и быстро запустить высокопроизводительную базу данных. 🐘


Работая с международными командами разработчиков, я регулярно сталкиваюсь с тем, что документация PostgreSQL и лучшие практики доступны преимущественно на английском. Чтобы быть эффективным DBA или DevOps-инженером, стоит инвестировать в свой технический английский. Английский язык для IT-специалистов от Skyeng — курс, который помог мне свободно читать документацию, общаться с зарубежными коллегами и глубже погружаться в нюансы настройки PostgreSQL.

Подготовка системы Linux к установке PostgreSQL

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

Начнем с обновления системы. Это критически важный шаг, который позволит избежать конфликтов зависимостей:

sudo apt update && sudo apt upgrade -y sudo dnf update -y

Далее необходимо установить базовые зависимости, которые потребуются для корректной работы PostgreSQL:

  • Инструменты разработки
  • Библиотеки для работы с SSL
  • Поддержка локалей
sudo apt install build-essential libssl-dev libreadline-dev zlib1g-dev curl locales sudo dnf install make gcc gcc-c++ libssl-devel readline-devel zlib-devel curl
Андрей Соколов, системный администратор Помню случай, когда мне нужно было срочно развернуть PostgreSQL на критически важном сервере. Стандартный процесс установки завершился ошибкой из-за недостаточной памяти. Сервер имел всего 512 МБ RAM — явно недостаточно для нагруженной СУБД. Решение было простым, но не очевидным: я настроил файл подкачки (swap) перед установкой: ``` sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab ``` После этого установка прошла без проблем, а сервер получил дополнительное "дыхание". Теперь я всегда проверяю не только версию дистрибутива, но и доступные ресурсы перед установкой.

Проверка совместимости системы с требуемой версией PostgreSQL — еще один важный шаг. В 2025 году актуальны версии PostgreSQL 16 и 17, которые требуют следующих минимальных системных характеристик:

Требование Минимум Рекомендуемое
Процессор 2 ядра 4+ ядер
Оперативная память 1 ГБ 4+ ГБ
Дисковое пространство 512 МБ + размер БД 10+ ГБ + размер БД
Версия ядра Linux 3.10+ 5.15+

Убедитесь также, что ваш файрвол настроен для разрешения подключений к PostgreSQL. По умолчанию сервер слушает порт 5432:

sudo ufw allow 5432/tcp sudo firewall-cmd --permanent --add-port=5432/tcp && sudo firewall-cmd --reload

Установка PostgreSQL на различные дистрибутивы Linux

Установка PostgreSQL различается в зависимости от дистрибутива Linux. Я расскажу о наиболее популярных вариантах и их особенностях. 🐧

Установка на Ubuntu/Debian

На Ubuntu и Debian можно установить PostgreSQL как из стандартных репозиториев, так и из официального репозитория PostgreSQL. Второй вариант предпочтительнее, так как обеспечивает доступ к актуальным версиям.

Добавление официального репозитория:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update

Установка PostgreSQL 17 (актуальная версия на 2025 год):

sudo apt install postgresql-17 postgresql-contrib-17

Установка на CentOS/RHEL/Fedora

Для систем на базе Red Hat процесс немного отличается:

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf -qy module disable postgresql sudo dnf install -y postgresql17-server postgresql17-contrib sudo /usr/pgsql-17/bin/postgresql-17-setup initdb sudo systemctl enable postgresql-17 sudo systemctl start postgresql-17

Установка на Arch Linux

Arch Linux и его производные имеют свой подход:

sudo pacman -S postgresql sudo -u postgres initdb -D /var/lib/postgres/data sudo systemctl enable postgresql sudo systemctl start postgresql

Сравнение процессов установки на различных дистрибутивах:

Дистрибутив Пакетный менеджер Имя пакета Особенности
Ubuntu/Debian apt postgresql-17 Автоматическая инициализация кластера
CentOS/RHEL dnf postgresql17-server Требует ручной инициализации
Fedora dnf postgresql17-server Требует ручной инициализации
Arch Linux pacman postgresql Всегда последняя версия, ручная инициализация
Alpine Linux apk postgresql Облегченная версия, оптимизированная для контейнеров

Настройка и запуск сервера PostgreSQL после установки

После успешной установки PostgreSQL требуется настройка сервера для обеспечения оптимальной производительности и безопасности. Следующие шаги помогут вам быстро запустить и настроить сервер. 🚀

Проверим статус сервера:

sudo systemctl status postgresql sudo systemctl status postgresql-17

Если сервер не запущен, запустим его:

sudo systemctl start postgresql sudo systemctl enable postgresql

Теперь необходимо настроить основные параметры сервера в файлах конфигурации. Основными файлами конфигурации PostgreSQL являются:

  • postgresql.conf — основная конфигурация сервера
  • pg_hba.conf — управление аутентификацией
  • pg_ident.conf — сопоставление внешних и внутренних пользователей

Расположение файлов конфигурации может различаться в зависимости от дистрибутива:

  • Ubuntu/Debian: /etc/postgresql/17/main/
  • CentOS/RHEL: /var/lib/pgsql/17/data/
  • Arch Linux: /var/lib/postgres/data/

Настройка основных параметров в postgresql.conf:

sudo nano /etc/postgresql/17/main/postgresql.conf

Оптимальные настройки для типичного сервера с 8 ГБ RAM:

  • listen_addresses = '*' — разрешает подключения со всех IP-адресов
  • max_connections = 100 — максимальное количество одновременных подключений
  • shared_buffers = 2GB — объем памяти для кэширования данных (25% от RAM)
  • effective_cache_size = 6GB — оценка доступной памяти для кэша (75% от RAM)
  • maintenance_work_mem = 512MB — память для операций обслуживания
  • wal_buffers = 16MB — буфер для записи журнала WAL
  • default_statistics_target = 100 — глубина статистики для оптимизатора

После внесения изменений перезапустите сервер:

sudo systemctl restart postgresql

Настройка аутентификации в pg_hba.conf:

sudo nano /etc/postgresql/17/main/pg_hba.conf

Добавьте следующие строки для разрешения локальных подключений (для разработки):

host all all 127.0.0.1/32 scram-sha-256 host all all ::1/128 scram-sha-256

Для разрешения удаленных подключений (для продакшена с ограничением по IP):

host all all 192.168.1.0/24 scram-sha-256

После изменения конфигурации аутентификации перезагрузите сервер:

sudo systemctl reload postgresql
Михаил Берёзов, DevOps-инженер В одном из проектов мы столкнулись с регулярными сбоями PostgreSQL из-за нехватки ресурсов. Сервер имел достаточно RAM (32 ГБ), но настройки по умолчанию были крайне неэффективны — PostgreSQL использовал всего 128 МБ для shared_buffers! Я разработал формулу для автоматизированной настройки PostgreSQL на основе доступных ресурсов: 1. shared_buffers = 25% доступной RAM 2. effective_cache_size = 75% доступной RAM 3. work_mem = (RAM - shared_buffers) / (max_connections * 4) 4. maintenance_work_mem = RAM / 16, но не более 2 ГБ 5. max_worker_processes = число ядер CPU Применив эти настройки, мы увеличили производительность сервера на 300% без дополнительных затрат на оборудование. Теперь я создаю подобные конфигурации автоматически с помощью скрипта, который анализирует доступные ресурсы и генерирует оптимальный postgresql.conf.

Создание пользователя и базы данных PostgreSQL

После установки и настройки сервера PostgreSQL следует создать пользователя и базу данных для вашего приложения. Этот процесс критически важен для безопасности и организации доступа к данным. 🔐

По умолчанию, PostgreSQL создает системного пользователя postgres, который имеет все права в СУБД. Для работы с базой данных через этого пользователя выполните:

sudo -i -u postgres psql

Теперь создадим нового пользователя с правами на создание баз данных:

CREATE USER myapp_user WITH PASSWORD 'secure_password' CREATEDB;

Создание базы данных для приложения:

CREATE DATABASE myapp_db WITH OWNER myapp_user ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8' TEMPLATE template0;

Предоставление всех привилегий на базу данных пользователю:

GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;

Для выхода из оболочки PostgreSQL используйте команду:

\q

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

psql -U myapp_user -h localhost -d myapp_db

Обратите внимание на различные типы пользователей в PostgreSQL и их типичные применения:

  • Суперпользователь (postgres) — имеет неограниченные права, используется только для администрирования
  • Владелец базы данных — может создавать объекты и управлять правами
  • Пользователь с ограниченными правами — имеет доступ только к определенным таблицам/схемам
  • Пользователь только для чтения — может только запрашивать данные без изменений

Для управления правами пользователей в PostgreSQL используется гибкая система ролей. Вот пример создания роли для приложения, которое должно только читать данные:

CREATE ROLE readonly_role; GRANT CONNECT ON DATABASE myapp_db TO readonly_role; GRANT USAGE ON SCHEMA public TO readonly_role; GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_role; CREATE USER readonly_user WITH PASSWORD 'read_only_password'; GRANT readonly_role TO readonly_user;

А вот пример создания роли для веб-приложения, которому требуются права на чтение и запись:

CREATE ROLE webapp_role; GRANT CONNECT ON DATABASE myapp_db TO webapp_role; GRANT USAGE ON SCHEMA public TO webapp_role; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO webapp_role; CREATE USER webapp_user WITH PASSWORD 'webapp_password'; GRANT webapp_role TO webapp_user;

Проверка работоспособности и базовая конфигурация PostgreSQL

После установки, настройки и создания пользователей необходимо убедиться, что ваш PostgreSQL сервер функционирует корректно и оптимально настроен для работы. Этот этап поможет выявить потенциальные проблемы до запуска в продакшен. 🔍

Начнем с проверки подключения к серверу:

psql -U myapp_user -h localhost -d myapp_db -c "SELECT version();"

Вы должны увидеть информацию о версии PostgreSQL, что подтверждает работоспособность сервера и корректность настроек аутентификации.

Проверка состояния сервера и основных метрик:

sudo -u postgres psql -c "SELECT pg_postmaster_start_time();" sudo -u postgres psql -c "SELECT count(*) FROM pg_stat_activity;"

Проверка работоспособности созданной базы данных:

psql -U myapp_user -h localhost -d myapp_db -c "CREATE TABLE test (id serial PRIMARY KEY, name varchar);" psql -U myapp_user -h localhost -d myapp_db -c "INSERT INTO test (name) VALUES ('Test entry');" psql -U myapp_user -h localhost -d myapp_db -c "SELECT * FROM test;" psql -U myapp_user -h localhost -d myapp_db -c "DROP TABLE test;"

Если все команды выполнились без ошибок, ваша база данных настроена правильно.

Базовая настройка производительности после проверки работоспособности включает:

  1. Оптимизацию автовакуума для предотвращения разрастания таблиц и индексов
  2. Настройку журналирования для отладки и мониторинга
  3. Настройку контрольных точек для минимизации I/O нагрузки

Рекомендуемые настройки автовакуума (добавьте их в postgresql.conf):

autovacuum = on autovacuum_max_workers = 3 autovacuum_naptime = 1min autovacuum_vacuum_threshold = 50 autovacuum_analyze_threshold = 50 autovacuum_vacuum_scale_factor = 0.02 autovacuum_analyze_scale_factor = 0.01

Настройки журналирования для отладки:

log_destination = 'stderr' logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_rotation_age = 1d log_rotation_size = 100MB log_min_duration_statement = 1000 log_checkpoints = on log_connections = on log_disconnections = on log_lock_waits = on

Оптимизация контрольных точек для снижения I/O нагрузки:

checkpoint_timeout = 15min checkpoint_completion_target = 0.9 max_wal_size = 2GB min_wal_size = 1GB

После внесения этих изменений не забудьте перезапустить PostgreSQL:

sudo systemctl restart postgresql

Для проверки оптимальности текущих настроек и выявления потенциальных проблем можно использовать расширение pg_stat_statements, которое предоставляет статистику по выполненным запросам:

sudo -u postgres psql -c "CREATE EXTENSION pg_stat_statements;"

Добавьте в postgresql.conf:

shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.track = all pg_stat_statements.max = 10000

После перезапуска сервера вы сможете анализировать производительность запросов:

sudo -u postgres psql -c "SELECT query, calls, total_time, rows, mean_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;"
Метрика производительности Оптимальное значение Проверка
Cache Hit Ratio ≥ 99% SELECT sum(heap_blks_read) as heap_read, sum(heap_blks_hit) as heap_hit, sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio FROM pg_statio_user_tables;
Index Usage ≥ 95% SELECT relname, 100 * idx_scan / (seq_scan + idx_scan) as percent_of_times_index_used FROM pg_stat_user_tables WHERE seq_scan + idx_scan > 0 ORDER BY percent_of_times_index_used ASC;
Блокировки Минимум SELECT count(*) FROM pg_locks WHERE NOT granted;
Длительные транзакции 0 SELECT xact_start, now() - xact_start AS xact_runtime, usename, datname, pid, state, query FROM pg_stat_activity WHERE (now() - xact_start) > '30 seconds'::interval ORDER BY xact_start;

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




Комментарии

Познакомьтесь со школой бесплатно

На вводном уроке с методистом

  1. Покажем платформу и ответим на вопросы
  2. Определим уровень и подберём курс
  3. Расскажем, как 
    проходят занятия

Оставляя заявку, вы принимаете условия соглашения об обработке персональных данных