Установка и конфигурация PostgreSQL — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Установка и конфигурация PostgreSQL = == 1. Подготовка системы == * Войдите в систему под учетн…»)
 
 
Строка 6: Строка 6:
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  
== 2. Установка PostgreSQL ===
+
== 2. Установка PostgreSQL ==
  
 
=== Обновление системы ===
 
=== Обновление системы ===
  
 
1. Обновите систему:
 
1. Обновите систему:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
  
 
2. Установите необходимые пакеты:
 
2. Установите необходимые пакеты:
<code>sudo apt install -y wget ca-certificates</code>
+
<pre>sudo apt install -y wget ca-certificates</pre>
  
 
=== Установка PostgreSQL ===
 
=== Установка PostgreSQL ===
  
 
1. Добавьте официальный репозиторий PostgreSQL:
 
1. Добавьте официальный репозиторий PostgreSQL:
<code>wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -</code>
+
<pre>wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -</pre>
  
 
2. Добавьте репозиторий в источники:
 
2. Добавьте репозиторий в источники:
<code>echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list</code>
+
<pre>echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list</pre>
  
 
3. Обновите список пакетов:
 
3. Обновите список пакетов:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
  
 
4. Установите PostgreSQL 15:
 
4. Установите PostgreSQL 15:
<code>sudo apt install -y postgresql-15 postgresql-client-15 postgresql-contrib-15</code>
+
<pre>sudo apt install -y postgresql-15 postgresql-client-15 postgresql-contrib-15</pre>
  
 
5. Проверьте версию:
 
5. Проверьте версию:
<code>psql --version</code>
+
<pre>psql --version</pre>
  
== 3. Первоначальная настройка ===
+
== 3. Первоначальная настройка ==
  
 
=== Запуск PostgreSQL ===
 
=== Запуск PostgreSQL ===
  
 
1. Запустите и включите автозапуск PostgreSQL:
 
1. Запустите и включите автозапуск PostgreSQL:
<code>sudo systemctl start postgresql</code>
+
<pre>sudo systemctl start postgresql</pre>
<code>sudo systemctl enable postgresql</code>
+
<pre>sudo systemctl enable postgresql</pre>
  
 
2. Проверьте статус:
 
2. Проверьте статус:
<code>sudo systemctl status postgresql</code>
+
<pre>sudo systemctl status postgresql</pre>
  
 
=== Настройка пользователя postgres ===
 
=== Настройка пользователя postgres ===
  
 
1. Переключитесь на пользователя postgres:
 
1. Переключитесь на пользователя postgres:
<code>sudo -u postgres psql</code>
+
<pre>sudo -u postgres psql</pre>
  
 
2. Установите пароль для пользователя postgres:
 
2. Установите пароль для пользователя postgres:
<code>ALTER USER postgres PASSWORD 'your_strong_password';</code>
+
<pre>ALTER USER postgres PASSWORD 'your_strong_password';</pre>
  
 
3. Выйдите из psql:
 
3. Выйдите из psql:
<code>\q</code>
+
<pre>\q</pre>
  
 
=== Создание базы данных и пользователя ===
 
=== Создание базы данных и пользователя ===
  
 
1. Создайте нового пользователя:
 
1. Создайте нового пользователя:
<code>sudo -u postgres createuser --interactive</code>
+
<pre>sudo -u postgres createuser --interactive</pre>
  
 
2. Создайте базу данных:
 
2. Создайте базу данных:
<code>sudo -u postgres createdb mydatabase</code>
+
<pre>sudo -u postgres createdb mydatabase</pre>
  
 
3. Подключитесь к базе данных:
 
3. Подключитесь к базе данных:
<code>sudo -u postgres psql mydatabase</code>
+
<pre>sudo -u postgres psql mydatabase</pre>
  
== 4. Конфигурация PostgreSQL ===
+
== 4. Конфигурация PostgreSQL ==
  
 
=== Основные настройки ===
 
=== Основные настройки ===
  
 
1. Найдите файл конфигурации:
 
1. Найдите файл конфигурации:
<code>sudo find /etc -name "postgresql.conf" 2>/dev/null</code>
+
<pre>sudo find /etc -name "postgresql.conf" 2>/dev/null</pre>
  
 
2. Отредактируйте основной конфигурационный файл:
 
2. Отредактируйте основной конфигурационный файл:
<code>sudo nano /etc/postgresql/15/main/postgresql.conf</code>
+
<pre>sudo nano /etc/postgresql/15/main/postgresql.conf</pre>
  
 
3. Настройте основные параметры:
 
3. Настройте основные параметры:
<code># Сетевые настройки
+
<pre>\# Сетевые настройки
 
listen_addresses = '*'
 
listen_addresses = '*'
 
port = 5432
 
port = 5432
  
# Настройки памяти
+
\# Настройки памяти
 
shared_buffers = 256MB
 
shared_buffers = 256MB
 
effective_cache_size = 1GB
 
effective_cache_size = 1GB
Строка 87: Строка 87:
 
maintenance_work_mem = 64MB
 
maintenance_work_mem = 64MB
  
# Настройки логирования
+
\# Настройки логирования
 
log_destination = 'stderr'
 
log_destination = 'stderr'
 
logging_collector = on
 
logging_collector = on
Строка 101: Строка 101:
 
log_lock_waits = on
 
log_lock_waits = on
  
# Настройки безопасности
+
\# Настройки безопасности
 
ssl = on
 
ssl = on
 
ssl_cert_file = 'server.crt'
 
ssl_cert_file = 'server.crt'
 
ssl_key_file = 'server.key'
 
ssl_key_file = 'server.key'
</code>
+
</pre>
  
 
=== Настройка аутентификации ===
 
=== Настройка аутентификации ===
  
 
1. Отредактируйте файл pg_hba.conf:
 
1. Отредактируйте файл pg_hba.conf:
<code>sudo nano /etc/postgresql/15/main/pg_hba.conf</code>
+
<pre>sudo nano /etc/postgresql/15/main/pg_hba.conf</pre>
  
 
2. Настройте методы аутентификации:
 
2. Настройте методы аутентификации:
<code># TYPE  DATABASE        USER            ADDRESS                METHOD
+
<pre>\# TYPE  DATABASE        USER            ADDRESS                METHOD
  
# "local" is for Unix domain socket connections only
+
\# "local" is for Unix domain socket connections only
 
local  all            postgres                                peer
 
local  all            postgres                                peer
 
local  all            all                                    md5
 
local  all            all                                    md5
  
# IPv4 local connections:
+
\# IPv4 local connections:
 
host    all            all            127.0.0.1/32            md5
 
host    all            all            127.0.0.1/32            md5
 
host    all            all            0.0.0.0/0              md5
 
host    all            all            0.0.0.0/0              md5
  
# IPv6 local connections:
+
\# IPv6 local connections:
 
host    all            all            ::1/128                md5
 
host    all            all            ::1/128                md5
</code>
+
</pre>
  
 
=== Настройка SSL ===
 
=== Настройка SSL ===
  
 
1. Создайте SSL сертификаты:
 
1. Создайте SSL сертификаты:
<code>sudo -u postgres openssl req -new -x509 -days 365 -nodes -text -out /var/lib/postgresql/15/main/server.crt -keyout /var/lib/postgresql/15/main/server.key -subj "/CN=postgresql-server"</code>
+
<pre>sudo -u postgres openssl req -new -x509 -days 365 -nodes -text -out /var/lib/postgresql/15/main/server.crt -keyout /var/lib/postgresql/15/main/server.key -subj "/CN=postgresql-server"</pre>
  
 
2. Установите права на сертификаты:
 
2. Установите права на сертификаты:
<code>sudo chmod 600 /var/lib/postgresql/15/main/server.key</code>
+
<pre>sudo chmod 600 /var/lib/postgresql/15/main/server.key</pre>
<code>sudo chown postgres:postgres /var/lib/postgresql/15/main/server.*</code>
+
<pre>sudo chown postgres:postgres /var/lib/postgresql/15/main/server.*</pre>
  
== 5. Управление PostgreSQL ===
+
== 5. Управление PostgreSQL ==
  
 
=== Основные команды ===
 
=== Основные команды ===
  
 
1. '''Запуск PostgreSQL''':
 
1. '''Запуск PostgreSQL''':
<code>sudo systemctl start postgresql</code>
+
<pre>sudo systemctl start postgresql</pre>
  
 
2. '''Остановка PostgreSQL''':
 
2. '''Остановка PostgreSQL''':
<code>sudo systemctl stop postgresql</code>
+
<pre>sudo systemctl stop postgresql</pre>
  
 
3. '''Перезапуск PostgreSQL''':
 
3. '''Перезапуск PostgreSQL''':
<code>sudo systemctl restart postgresql</code>
+
<pre>sudo systemctl restart postgresql</pre>
  
 
4. '''Проверка статуса''':
 
4. '''Проверка статуса''':
<code>sudo systemctl status postgresql</code>
+
<pre>sudo systemctl status postgresql</pre>
  
 
5. '''Подключение к базе данных''':
 
5. '''Подключение к базе данных''':
<code>psql -h localhost -U username -d database_name</code>
+
<pre>psql -h localhost -U username -d database_name</pre>
  
 
=== Управление базами данных ===
 
=== Управление базами данных ===
  
 
1. '''Создание базы данных''':
 
1. '''Создание базы данных''':
<code>sudo -u postgres createdb mydatabase</code>
+
<pre>sudo -u postgres createdb mydatabase</pre>
  
 
2. '''Удаление базы данных''':
 
2. '''Удаление базы данных''':
<code>sudo -u postgres dropdb mydatabase</code>
+
<pre>sudo -u postgres dropdb mydatabase</pre>
  
 
3. '''Создание пользователя''':
 
3. '''Создание пользователя''':
<code>sudo -u postgres createuser --interactive</code>
+
<pre>sudo -u postgres createuser --interactive</pre>
  
 
4. '''Удаление пользователя''':
 
4. '''Удаление пользователя''':
<code>sudo -u postgres dropuser username</code>
+
<pre>sudo -u postgres dropuser username</pre>
  
 
5. '''Изменение пароля пользователя''':
 
5. '''Изменение пароля пользователя''':
<code>sudo -u postgres psql -c "ALTER USER username PASSWORD 'new_password';"</code>
+
<pre>sudo -u postgres psql -c "ALTER USER username PASSWORD 'new_password';"</pre>
  
== 6. Резервное копирование ===
+
== 6. Резервное копирование ==
  
 
=== Создание резервной копии ===
 
=== Создание резервной копии ===
  
 
1. '''Полное резервное копирование''':
 
1. '''Полное резервное копирование''':
<code>sudo -u postgres pg_dumpall > backup_all.sql</code>
+
<pre>sudo -u postgres pg_dumpall > backup_all.sql</pre>
  
 
2. '''Резервное копирование конкретной базы данных''':
 
2. '''Резервное копирование конкретной базы данных''':
<code>sudo -u postgres pg_dump mydatabase > mydatabase_backup.sql</code>
+
<pre>sudo -u postgres pg_dump mydatabase > mydatabase_backup.sql</pre>
  
 
3. '''Сжатое резервное копирование''':
 
3. '''Сжатое резервное копирование''':
<code>sudo -u postgres pg_dump mydatabase | gzip > mydatabase_backup.sql.gz</code>
+
<pre>sudo -u postgres pg_dump mydatabase | gzip > mydatabase_backup.sql.gz</pre>
  
 
4. '''Резервное копирование с настройками''':
 
4. '''Резервное копирование с настройками''':
<code>sudo -u postgres pg_dump -h localhost -U postgres -Fc mydatabase > mydatabase_backup.dump</code>
+
<pre>sudo -u postgres pg_dump -h localhost -U postgres -Fc mydatabase > mydatabase_backup.dump</pre>
  
 
=== Восстановление из резервной копии ===
 
=== Восстановление из резервной копии ===
  
 
1. '''Восстановление из SQL файла''':
 
1. '''Восстановление из SQL файла''':
<code>sudo -u postgres psql mydatabase < mydatabase_backup.sql</code>
+
<pre>sudo -u postgres psql mydatabase < mydatabase_backup.sql</pre>
  
 
2. '''Восстановление из сжатого файла''':
 
2. '''Восстановление из сжатого файла''':
<code>gunzip -c mydatabase_backup.sql.gz | sudo -u postgres psql mydatabase</code>
+
<pre>gunzip -c mydatabase_backup.sql.gz | sudo -u postgres psql mydatabase</pre>
  
 
3. '''Восстановление из dump файла''':
 
3. '''Восстановление из dump файла''':
<code>sudo -u postgres pg_restore -d mydatabase mydatabase_backup.dump</code>
+
<pre>sudo -u postgres pg_restore -d mydatabase mydatabase_backup.dump</pre>
  
== 7. Мониторинг и оптимизация ===
+
== 7. Мониторинг и оптимизация ==
  
 
=== Мониторинг производительности ===
 
=== Мониторинг производительности ===
  
 
1. '''Просмотр активных подключений''':
 
1. '''Просмотр активных подключений''':
<code>sudo -u postgres psql -c "SELECT * FROM pg_stat_activity;"</code>
+
<pre>sudo -u postgres psql -c "SELECT * FROM pg_stat_activity;"</pre>
  
 
2. '''Просмотр размера баз данных''':
 
2. '''Просмотр размера баз данных''':
<code>sudo -u postgres psql -c "SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;"</code>
+
<pre>sudo -u postgres psql -c "SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;"</pre>
  
 
3. '''Просмотр медленных запросов''':
 
3. '''Просмотр медленных запросов''':
<code>sudo -u postgres psql -c "SELECT query, mean_time, calls FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;"</code>
+
<pre>sudo -u postgres psql -c "SELECT query, mean_time, calls FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;"</pre>
  
 
=== Оптимизация производительности ===
 
=== Оптимизация производительности ===
  
 
1. '''Анализ таблиц''':
 
1. '''Анализ таблиц''':
<code>sudo -u postgres psql -d mydatabase -c "ANALYZE;"</code>
+
<pre>sudo -u postgres psql -d mydatabase -c "ANALYZE;"</pre>
  
 
2. '''Переиндексация таблиц''':
 
2. '''Переиндексация таблиц''':
<code>sudo -u postgres psql -d mydatabase -c "REINDEX DATABASE mydatabase;"</code>
+
<pre>sudo -u postgres psql -d mydatabase -c "REINDEX DATABASE mydatabase;"</pre>
  
 
3. '''Очистка базы данных''':
 
3. '''Очистка базы данных''':
<code>sudo -u postgres psql -d mydatabase -c "VACUUM FULL;"</code>
+
<pre>sudo -u postgres psql -d mydatabase -c "VACUUM FULL;"</pre>
  
== 8. Настройка репликации ===
+
== 8. Настройка репликации ==
  
 
=== Настройка мастер-сервера ===
 
=== Настройка мастер-сервера ===
  
 
1. Отредактируйте postgresql.conf:
 
1. Отредактируйте postgresql.conf:
<code>sudo nano /etc/postgresql/15/main/postgresql.conf</code>
+
<pre>sudo nano /etc/postgresql/15/main/postgresql.conf</pre>
  
 
2. Добавьте настройки репликации:
 
2. Добавьте настройки репликации:
<code>wal_level = replica
+
<pre>wal_level = replica
 
max_wal_senders = 3
 
max_wal_senders = 3
 
max_replication_slots = 3
 
max_replication_slots = 3
 
hot_standby = on
 
hot_standby = on
</code>
+
</pre>
  
 
3. Настройте pg_hba.conf:
 
3. Настройте pg_hba.conf:
<code>host replication replicator 192.168.1.0/24 md5</code>
+
<pre>host replication replicator 192.168.1.0/24 md5</pre>
  
 
=== Настройка слейв-сервера ===
 
=== Настройка слейв-сервера ===
  
 
1. Создайте пользователя для репликации:
 
1. Создайте пользователя для репликации:
<code>sudo -u postgres psql -c "CREATE USER replicator REPLICATION LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD 'replicator_password';"</code>
+
<pre>sudo -u postgres psql -c "CREATE USER replicator REPLICATION LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD 'replicator_password';"</pre>
  
 
2. Создайте базовую резервную копию:
 
2. Создайте базовую резервную копию:
<code>sudo -u postgres pg_basebackup -h master_server -D /var/lib/postgresql/15/main -U replicator -v -P -W</code>
+
<pre>sudo -u postgres pg_basebackup -h master_server -D /var/lib/postgresql/15/main -U replicator -v -P -W</pre>
  
== 9. Безопасность ===
+
== 9. Безопасность ==
  
 
=== Настройка файрвола ===
 
=== Настройка файрвола ===
  
 
1. '''Разрешите порт PostgreSQL''':
 
1. '''Разрешите порт PostgreSQL''':
<code>sudo ufw allow 5432/tcp</code>
+
<pre>sudo ufw allow 5432/tcp</pre>
  
 
2. '''Ограничьте доступ по IP''':
 
2. '''Ограничьте доступ по IP''':
<code>sudo ufw allow from 192.168.1.0/24 to any port 5432</code>
+
<pre>sudo ufw allow from 192.168.1.0/24 to any port 5432</pre>
  
 
=== Настройка SSL ===
 
=== Настройка SSL ===
  
 
1. '''Проверьте SSL соединения''':
 
1. '''Проверьте SSL соединения''':
<code>sudo -u postgres psql -c "SHOW ssl;"</code>
+
<pre>sudo -u postgres psql -c "SHOW ssl;"</pre>
  
 
2. '''Проверьте SSL сертификаты''':
 
2. '''Проверьте SSL сертификаты''':
<code>sudo -u postgres psql -c "SELECT * FROM pg_stat_ssl;"</code>
+
<pre>sudo -u postgres psql -c "SELECT * FROM pg_stat_ssl;"</pre>
  
== 10. Устранение неполадок ===
+
== 10. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
  
 
1. '''PostgreSQL не запускается''':
 
1. '''PostgreSQL не запускается''':
* Проверьте логи: <code>sudo journalctl -u postgresql</code>
+
* Проверьте логи: <pre>sudo journalctl -u postgresql</pre>
* Проверьте конфигурацию: <code>sudo -u postgres postgres --check-config</code>
+
* Проверьте конфигурацию: <pre>sudo -u postgres postgres --check-config</pre>
* Проверьте права доступа: <code>ls -la /var/lib/postgresql/15/main/</code>
+
* Проверьте права доступа: <pre>ls -la /var/lib/postgresql/15/main/</pre>
  
 
2. '''Ошибки подключения''':
 
2. '''Ошибки подключения''':
Строка 288: Строка 288:
  
 
1. '''Проверка статуса''':
 
1. '''Проверка статуса''':
<code>sudo systemctl status postgresql</code>
+
<pre>sudo systemctl status postgresql</pre>
  
 
2. '''Проверка подключений''':
 
2. '''Проверка подключений''':
<code>sudo netstat -tlnp | grep :5432</code>
+
<pre>sudo netstat -tlnp | grep :5432</pre>
  
 
3. '''Проверка логов''':
 
3. '''Проверка логов''':
<code>sudo tail -f /var/log/postgresql/postgresql-15-main.log</code>
+
<pre>sudo tail -f /var/log/postgresql/postgresql-15-main.log</pre>
  
== 11. Полезные команды ===
+
== 11. Полезные команды ==
  
 
=== Администрирование ===
 
=== Администрирование ===
  
 
1. '''Просмотр всех баз данных''':
 
1. '''Просмотр всех баз данных''':
<code>sudo -u postgres psql -l</code>
+
<pre>sudo -u postgres psql -l</pre>
  
 
2. '''Просмотр всех пользователей''':
 
2. '''Просмотр всех пользователей''':
<code>sudo -u postgres psql -c "\du"</code>
+
<pre>sudo -u postgres psql -c "\du"</pre>
  
 
3. '''Просмотр таблиц в базе данных''':
 
3. '''Просмотр таблиц в базе данных''':
<code>sudo -u postgres psql -d mydatabase -c "\dt"</code>
+
<pre>sudo -u postgres psql -d mydatabase -c "\dt"</pre>
  
 
4. '''Просмотр схемы таблицы''':
 
4. '''Просмотр схемы таблицы''':
<code>sudo -u postgres psql -d mydatabase -c "\d table_name"</code>
+
<pre>sudo -u postgres psql -d mydatabase -c "\d table_name"</pre>
  
 
=== Мониторинг ===
 
=== Мониторинг ===
  
 
1. '''Просмотр статистики''':
 
1. '''Просмотр статистики''':
<code>sudo -u postgres psql -c "SELECT * FROM pg_stat_database;"</code>
+
<pre>sudo -u postgres psql -c "SELECT * FROM pg_stat_database;"</pre>
  
 
2. '''Просмотр блокировок''':
 
2. '''Просмотр блокировок''':
<code>sudo -u postgres psql -c "SELECT * FROM pg_locks;"</code>
+
<pre>sudo -u postgres psql -c "SELECT * FROM pg_locks;"</pre>
  
 
3. '''Просмотр активных запросов''':
 
3. '''Просмотр активных запросов''':
<code>sudo -u postgres psql -c "SELECT pid, now() - pg_stat_activity.query_start AS duration, query FROM pg_stat_activity WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes';"</code>
+
<pre>sudo -u postgres psql -c "SELECT pid, now() - pg_stat_activity.query_start AS duration, query FROM pg_stat_activity WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes';"</pre>
  
 
== Заключение ==
 
== Заключение ==

Текущая версия на 10:41, 15 октября 2025

Содержание

Установка и конфигурация PostgreSQL

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.

2. Установка PostgreSQL

Обновление системы

1. Обновите систему:

sudo apt update

2. Установите необходимые пакеты:

sudo apt install -y wget ca-certificates

Установка PostgreSQL

1. Добавьте официальный репозиторий PostgreSQL:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

2. Добавьте репозиторий в источники:

echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list

3. Обновите список пакетов:

sudo apt update

4. Установите PostgreSQL 15:

sudo apt install -y postgresql-15 postgresql-client-15 postgresql-contrib-15

5. Проверьте версию:

psql --version

3. Первоначальная настройка

Запуск PostgreSQL

1. Запустите и включите автозапуск PostgreSQL:

sudo systemctl start postgresql
sudo systemctl enable postgresql

2. Проверьте статус:

sudo systemctl status postgresql

Настройка пользователя postgres

1. Переключитесь на пользователя postgres:

sudo -u postgres psql

2. Установите пароль для пользователя postgres:

ALTER USER postgres PASSWORD 'your_strong_password';

3. Выйдите из psql:

\q

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

1. Создайте нового пользователя:

sudo -u postgres createuser --interactive

2. Создайте базу данных:

sudo -u postgres createdb mydatabase

3. Подключитесь к базе данных:

sudo -u postgres psql mydatabase

4. Конфигурация PostgreSQL

Основные настройки

1. Найдите файл конфигурации:

sudo find /etc -name "postgresql.conf" 2>/dev/null

2. Отредактируйте основной конфигурационный файл:

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

3. Настройте основные параметры:

\# Сетевые настройки
listen_addresses = '*'
port = 5432

\# Настройки памяти
shared_buffers = 256MB
effective_cache_size = 1GB
work_mem = 4MB
maintenance_work_mem = 64MB

\# Настройки логирования
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_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on

\# Настройки безопасности
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'

Настройка аутентификации

1. Отредактируйте файл pg_hba.conf:

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

2. Настройте методы аутентификации:

\# TYPE  DATABASE        USER            ADDRESS                 METHOD

\# "local" is for Unix domain socket connections only
local   all             postgres                                peer
local   all             all                                     md5

\# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5

\# IPv6 local connections:
host    all             all             ::1/128                 md5

Настройка SSL

1. Создайте SSL сертификаты:

sudo -u postgres openssl req -new -x509 -days 365 -nodes -text -out /var/lib/postgresql/15/main/server.crt -keyout /var/lib/postgresql/15/main/server.key -subj "/CN=postgresql-server"

2. Установите права на сертификаты:

sudo chmod 600 /var/lib/postgresql/15/main/server.key
sudo chown postgres:postgres /var/lib/postgresql/15/main/server.*

5. Управление PostgreSQL

Основные команды

1. Запуск PostgreSQL:

sudo systemctl start postgresql

2. Остановка PostgreSQL:

sudo systemctl stop postgresql

3. Перезапуск PostgreSQL:

sudo systemctl restart postgresql

4. Проверка статуса:

sudo systemctl status postgresql

5. Подключение к базе данных:

psql -h localhost -U username -d database_name

Управление базами данных

1. Создание базы данных:

sudo -u postgres createdb mydatabase

2. Удаление базы данных:

sudo -u postgres dropdb mydatabase

3. Создание пользователя:

sudo -u postgres createuser --interactive

4. Удаление пользователя:

sudo -u postgres dropuser username

5. Изменение пароля пользователя:

sudo -u postgres psql -c "ALTER USER username PASSWORD 'new_password';"

6. Резервное копирование

Создание резервной копии

1. Полное резервное копирование:

sudo -u postgres pg_dumpall > backup_all.sql

2. Резервное копирование конкретной базы данных:

sudo -u postgres pg_dump mydatabase > mydatabase_backup.sql

3. Сжатое резервное копирование:

sudo -u postgres pg_dump mydatabase | gzip > mydatabase_backup.sql.gz

4. Резервное копирование с настройками:

sudo -u postgres pg_dump -h localhost -U postgres -Fc mydatabase > mydatabase_backup.dump

Восстановление из резервной копии

1. Восстановление из SQL файла:

sudo -u postgres psql mydatabase < mydatabase_backup.sql

2. Восстановление из сжатого файла:

gunzip -c mydatabase_backup.sql.gz | sudo -u postgres psql mydatabase

3. Восстановление из dump файла:

sudo -u postgres pg_restore -d mydatabase mydatabase_backup.dump

7. Мониторинг и оптимизация

Мониторинг производительности

1. Просмотр активных подключений:

sudo -u postgres psql -c "SELECT * FROM pg_stat_activity;"

2. Просмотр размера баз данных:

sudo -u postgres psql -c "SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;"

3. Просмотр медленных запросов:

sudo -u postgres psql -c "SELECT query, mean_time, calls FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;"

Оптимизация производительности

1. Анализ таблиц:

sudo -u postgres psql -d mydatabase -c "ANALYZE;"

2. Переиндексация таблиц:

sudo -u postgres psql -d mydatabase -c "REINDEX DATABASE mydatabase;"

3. Очистка базы данных:

sudo -u postgres psql -d mydatabase -c "VACUUM FULL;"

8. Настройка репликации

Настройка мастер-сервера

1. Отредактируйте postgresql.conf:

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

2. Добавьте настройки репликации:

wal_level = replica
max_wal_senders = 3
max_replication_slots = 3
hot_standby = on

3. Настройте pg_hba.conf:

host replication replicator 192.168.1.0/24 md5

Настройка слейв-сервера

1. Создайте пользователя для репликации:

sudo -u postgres psql -c "CREATE USER replicator REPLICATION LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD 'replicator_password';"

2. Создайте базовую резервную копию:

sudo -u postgres pg_basebackup -h master_server -D /var/lib/postgresql/15/main -U replicator -v -P -W

9. Безопасность

Настройка файрвола

1. Разрешите порт PostgreSQL:

sudo ufw allow 5432/tcp

2. Ограничьте доступ по IP:

sudo ufw allow from 192.168.1.0/24 to any port 5432

Настройка SSL

1. Проверьте SSL соединения:

sudo -u postgres psql -c "SHOW ssl;"

2. Проверьте SSL сертификаты:

sudo -u postgres psql -c "SELECT * FROM pg_stat_ssl;"

10. Устранение неполадок

Частые проблемы

1. PostgreSQL не запускается:

  • Проверьте логи:
    sudo journalctl -u postgresql
  • Проверьте конфигурацию:
    sudo -u postgres postgres --check-config
  • Проверьте права доступа:
    ls -la /var/lib/postgresql/15/main/

2. Ошибки подключения:

  • Проверьте pg_hba.conf
  • Проверьте сетевые настройки
  • Проверьте файрвол

3. Проблемы с производительностью:

  • Проверьте логи медленных запросов
  • Оптимизируйте индексы
  • Настройте параметры памяти

Диагностика

1. Проверка статуса:

sudo systemctl status postgresql

2. Проверка подключений:

sudo netstat -tlnp | grep :5432

3. Проверка логов:

sudo tail -f /var/log/postgresql/postgresql-15-main.log

11. Полезные команды

Администрирование

1. Просмотр всех баз данных:

sudo -u postgres psql -l

2. Просмотр всех пользователей:

sudo -u postgres psql -c "\du"

3. Просмотр таблиц в базе данных:

sudo -u postgres psql -d mydatabase -c "\dt"

4. Просмотр схемы таблицы:

sudo -u postgres psql -d mydatabase -c "\d table_name"

Мониторинг

1. Просмотр статистики:

sudo -u postgres psql -c "SELECT * FROM pg_stat_database;"

2. Просмотр блокировок:

sudo -u postgres psql -c "SELECT * FROM pg_locks;"

3. Просмотр активных запросов:

sudo -u postgres psql -c "SELECT pid, now() - pg_stat_activity.query_start AS duration, query FROM pg_stat_activity WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes';"

Заключение

PostgreSQL успешно установлен и настроен! Теперь у вас есть мощная система управления базами данных с возможностями репликации, мониторинга и резервного копирования.

Для размещения ваших баз данных на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой PostgreSQL и оптимизацией производительности ваших баз данных!