Установка PostgreSQL на Ubuntu/Debian и RHEL/CentOS, создание пользователей и баз данных, основные SQL-команды, настройка удалённого подключения и резервное копирование. Пошаговое руководство.
PostgreSQL — одна из самых мощных реляционных систем управления базами данных с открытым исходным кодом в мире. Благодаря соответствию ACID, расширенным типам данных, поддержке JSON и широким возможностям расширения она охватывает широкий спектр применений — от корпоративных приложений до небольших проектов. В этом руководстве рассматриваются установка, базовое управление и настройка PostgreSQL.
Установка на Ubuntu/Debian
Установка из репозитория пакетов
На системах Ubuntu и Debian PostgreSQL можно установить из официальных репозиториев:
hljs bash
# Обновить список пакетов
apt update
# Установить PostgreSQL
apt install -y postgresql postgresql-contrib
# Проверить статус службы
systemctl status postgresql
# Включить автозапуск
systemctl enable postgresql
Использование официального репозитория PostgreSQL
Для получения более новой версии можно добавить официальный репозиторий PostgreSQL:
# Добавить официальный репозиторий PostgreSQL
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Отключить встроенный модуль PostgreSQL
dnf -qy module disable postgresql
# Установить PostgreSQL 16
dnf install -y postgresql16-server postgresql16-contrib
# Инициализировать базу данных
/usr/pgsql-16/bin/postgresql-16-setup initdb
# Запустить и включить службу
systemctl enable --now postgresql-16
# Проверить статус службы
systemctl status postgresql-16
Проверка версии PostgreSQL
hljs bash
psql --version
# Вывод: psql (PostgreSQL) 16.x# Информация о службе
psql -U postgres -c 'SELECT version();'
Переключение на пользователя postgres и подключение
При установке создаётся системный пользователь postgres. Для подключения к базе данных:
hljs bash
# Переключиться на системного пользователя postgres
su - postgres
# Подключиться к консоли PostgreSQL
psql
# Подключиться напрямую от rootsudo -u postgres psql
# Подключиться к конкретной базе данныхsudo -u postgres psql -d mydb
Создание пользователей и баз данных
Создание нового пользователя
hljs sql
-- В консоли PostgreSQL-- Создать нового пользователяCREATEUSER appuser WITH PASSWORD 'НадёжныйПароль123!';
-- Создать суперпользователя (использовать с осторожностью)CREATEUSER adminuser WITH PASSWORD 'АдминПароль!' SUPERUSER;
-- Список пользователей
\du
-- Изменить пароль пользователяALTERUSER appuser WITH PASSWORD 'НовыйПароль456!';
-- Предоставить право создания баз данныхALTERUSER appuser CREATEDB;
Создание базы данных и назначение прав
hljs sql
-- Создать базу данныхCREATE DATABASE myapp OWNER appuser ENCODING 'UTF8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8' TEMPLATE template0;
-- Список баз данных
\l
-- Подключиться к базе данных
\c myapp
-- Предоставить полные права пользователюGRANTALL PRIVILEGES ON DATABASE myapp TO appuser;
-- Права на схему (PostgreSQL 15+)GRANTALLON SCHEMA public TO appuser;
-- Удалить базу данныхDROP DATABASE staraya_baza;
Основные SQL-команды
hljs sql
-- Создать таблицуCREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULLUNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP
);
-- Вставить данныеINSERT INTO users (username, email) VALUES ('ivan', 'ivan@example.com');
-- Запросить данныеSELECT*FROM users;
SELECT username, email FROM users WHERE id =1;
-- Обновить данныеUPDATE users SET email ='novyi@example.com'WHERE id =1;
-- Удалить данныеDELETEFROM users WHERE id =5;
-- Список таблиц
\dt
-- Просмотр структуры таблицы
\d users
-- Создать индексCREATE INDEX idx_users_email ON users(email);
Настройка удалённого подключения
По умолчанию PostgreSQL принимает подключения только с localhost. Для удалённого доступа необходимо отредактировать два файла.
1. Редактирование postgresql.conf
hljs bash
# Найти расположение файла конфигурацииsudo -u postgres psql -c 'SHOW config_file;'# Редактировать
nano /etc/postgresql/16/main/postgresql.conf
hljs ini
# Изменить строку listen_addresseslisten_addresses = '*'# Порт (по умолчанию 5432)port = 5432
2. Редактирование pg_hba.conf
hljs bash
nano /etc/postgresql/16/main/pg_hba.conf
# Добавить строку для удалённых подключений (в конец файла)
# TYPE DATABASE USER ADDRESS METHOD
host myapp appuser 192.168.1.0/24 scram-sha-256
host all all 0.0.0.0/0 scram-sha-256
3. Перезапуск службы и настройка брандмауэра
hljs bash
# Перезапустить службу
systemctl restart postgresql
# Открыть порт с помощью UFW
ufw allow 5432/tcp
# С помощью iptables
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
Открытие порта PostgreSQL (5432) в интернет является угрозой безопасности. По возможности используйте SSH-туннель или VPN. Если удалённый доступ необходим, ограничьте его конкретными IP-адресами.
Резервное копирование и восстановление
Резервное копирование с помощью pg_dump
hljs bash
# Резервная копия одной базы данных
pg_dump -U postgres myapp > myapp_backup.sql
# Сжатый формат (более быстрое восстановление)
pg_dump -U postgres -Fc myapp > myapp_backup.dump
# Резервная копия всех баз данных
pg_dumpall -U postgres > all_databases.sql
# Резервная копия с удалённого сервера
pg_dump -h 192.168.1.100 -U postgres myapp > myapp_remote.sql
Восстановление из резервной копии
hljs bash
# Восстановление из формата SQL
psql -U postgres myapp < myapp_backup.sql
# Восстановление из сжатого формата
pg_restore -U postgres -d myapp myapp_backup.dump
# Восстановление всех баз данных
psql -U postgres < all_databases.sql
Автоматическое резервное копирование через Cron
hljs bash
# Редактировать crontab
crontab -e
# Создавать резервную копию каждую ночь в 02:00
0 2 * * * pg_dump -U postgres myapp | gzip > /backup/myapp_$(date +\%Y\%m\%d).sql.gz
# Удалять резервные копии старше 30 дней
0 3 * * * find /backup -name 'myapp_*.sql.gz' -mtime +30 -delete
Управление службой
hljs bash
# Запустить службу
systemctl start postgresql
# Остановить службу
systemctl stop postgresql
# Перезапустить службу
systemctl restart postgresql
# Перезагрузить конфигурацию (без перезапуска)
systemctl reload postgresql
# Просмотр журналов
journalctl -u postgresql -f
tail -f /var/log/postgresql/postgresql-16-main.log
Заключение
PostgreSQL — надёжная и высокопроизводительная система управления базами данных. После установки не пренебрегайте настройкой безопасности, выполняйте регулярное резервное копирование и правильно настраивайте методы аутентификации для удалённого доступа. PostgreSQL без проблем работает на серверах REXE и обеспечивает надёжную производительность при высоких нагрузках.
Часто задаваемые вопросы
В чём основное отличие PostgreSQL от MySQL?
PostgreSQL предлагает полное соответствие ACID, расширенные типы данных (JSON, JSONB, массивы, hstore), оконные функции и широкие возможности расширения. MySQL в целом проще в установке и управлении, тогда как PostgreSQL лучше справляется со сложными запросами и большими наборами данных. Для новых проектов рекомендуется PostgreSQL.
Как изменить пароль пользователя postgres?
Подключитесь к консоли PostgreSQL командой sudo -u postgres psql, затем выполните ALTER USER postgres WITH PASSWORD 'НовыйПароль'; Для изменения пароля системного пользователя используйте sudo passwd postgres.
Не могу установить удалённое подключение. Что проверить?
Проверьте три вещи: 1) убедитесь, что в postgresql.conf установлено listen_addresses = '*', 2) проверьте, что в pg_hba.conf добавлена строка host для соответствующего IP, 3) убедитесь, что порт 5432 открыт в брандмауэре (ufw status или iptables -L). Не забудьте перезапустить службу после внесения изменений.
Насколько надёжна резервная копия, созданная с помощью pg_dump?
pg_dump создаёт согласованный снимок и очень надёжен. Для больших баз данных используйте -Fc (пользовательский формат); этот формат поддерживает параллельное восстановление и создаёт файлы меньшего размера. Для критически важных систем также рассмотрите более продвинутые методы резервного копирования, такие как архивирование WAL или потоковая репликация.
Какой порт использует PostgreSQL и как его изменить?
PostgreSQL по умолчанию использует порт 5432. Чтобы изменить его, обновите строку port = 5432 в файле /etc/postgresql/16/main/postgresql.conf нужным номером порта и перезапустите службу. Не забудьте также обновить pg_hba.conf и строки подключения.
Могут ли несколько версий PostgreSQL работать на одном сервере?
Да, каждая версия может работать на разных портах. Например, PostgreSQL 14 может работать на стандартном порту 5432, а PostgreSQL 16 — на порту 5433. Каждая версия имеет собственный каталог данных и модуль службы. Используйте команду pg_lsclusters для просмотра всех существующих кластеров.
Пошаговая установка MySQL и MariaDB на Linux, mysql_secure_installation, создание баз данных и пользователей, основные SQL-команды, настройка удалённого доступа и оптимизация производительности.
Установка Redis и Memcached на Ubuntu/Debian, основные команды, настройки персистентности, конфигурация TTL, сравнение Redis и Memcached, интеграция с приложениями.