Конфиги Postgres
postgresql.conf- главный конфиг postgrespostgresql.auto.conf- автоматически управляемый конфиг, руками не меняетсяpg_hba.conf- правила аутентификации и входаpg_ident.conf- маппинг системных пользователей в postgres роли для ident/peerPG_VERSION- major release версия кластераpostmaster.pid- pid запущенного сервераpostmaster.opts- параметры с какими был запущен сервер-
current_logfiles- служебный файл с указанием текущих лог файлов -
base/- основные файлы таблиц для обычных бд global/- глобальные системные таблицы кластера (роли, юзеры и тд)-
pg_tblspc/- симлинки на tablespace, вынесенные в другие места фс -
pg_wal/- wal pg_xact/- информация о статусе транзакцийpg_commit_ts/- хранение timestamps коммита транзакций-
pg_subtrans/- информация о подчиненных транзакциях -
pg_stat/- Постоянные файлы статистики/служебного состояния. pg_stat_tmp/- Временные статистические файлы.pg_snapshots/- Экспортированные snapshots для pg_export_snapshot().pg_notify/- Служебные данные механизма LISTEN/NOTIFY.pg_serial/- Информация для serializable transactions.-
pg_dynshmem/- Динамическая shared memory. -
pg_logical/- Данные логической репликации и logical decoding. -
pg_replslot/- Replication slots. Очень важный каталог: если слоты зависнут, WAL может разрастаться. -
log/- логи
postgresql.conf
listen_addresses = '*'
port = 5432
max_connections = 100
superuser_reserved_connections = 3 резерв слотов для администратора, чтобы зайти при полной загрузке
shared_buffers = 8GB оперативка под кэш страниц бд (25% от RAM)
work_mem = 64MB лимит памяти на одну операцию сортировки или хеширования внутри запроса (до сброса на диск)
maintenance_work_mem = 2GB память для служебных операций (VACUUM, создание индексов, добавление внешних ключей)
effective_cache_size = 24GB подсказка планировщику: сколько всего памяти (включая кэш ОС) доступно для кэширования (75% от RAM)
wal_level = replica уровень записи в WAL-журнал
fsync = on принудительная запись данных на физический диск (гарантия сохранности при сбое питания)
synchronous_commit = on ждать физической записи WAL перед подтверждением транзакции (для надежности)
wal_buffers = 16MB объем буфера для несохраненных данных WAL (обычно 16MB достаточно)
checkpoint_timeout = 15min максимальное время между автоматическими контрольными точками (сбросом грязных страниц)
max_wal_size = 4GB максимальный размер файлов WAL, при достижении которого запускается чекпоинт
checkpoint_completion_target = 0.9 растягивать процесс записи чекпоинта на 90% времени, чтобы не грузить диск скачками
random_page_cost = 1.1 стоимость случайного чтения, для SSD - 1.1 (почти равно последовательному чтению 1.0)
effective_io_concurrency = 200 количество одновременных операций ввода-вывода, для SSD - 200
logging_collector = on включить перехват логов в файлы
log_directory = 'pg_log' директория куда будут падать файлы логов
log_filename = 'postgresql-%a.log' имя файла лога
log_rotation_age = 1d создавать новый файл лога каждые 24 часа
log_min_duration_statement = 1000 записывать в лог все SQL-запросы, которые выполнялись дольше 1000 мс (1 сек).
log_checkpoints = on записывать в лог информацию о чекпоинтах
log_lock_waits = on записывать в лог сессии, которые долго ждут освобождения блокировки
autovacuum = on включить автоматическую очистку мусора
autovacuum_max_workers = 3 количество параллельных процессов автовакуума
autovacuum_naptime = 1min как часто демон автовакуума просыпается и проверяет таблицы
autovacuum_vacuum_scale_factor = 0.05 процент измененных строк (5%), после которого таблица ставится в очередь на очистку
autovacuum_analyze_scale_factor = 0.02 процент измененных строк (2%), после которого обновляется статистика планировщика
pg_hba.conf
TYPE
local подключение через Unix-domain socket. Это когда вы пишете psql прямо на сервере без флага -h, самый быстрый способ
host подключение через TCP/IP. Работает и для SSL, и для обычного соединения
hostssl только зашифрованные (SSL) TCP подключения. Если клиент не умеет SSL - его не пустят
hostnossl только незашифрованные TCP подключения. (Редко используется, обычно для отладки)
DATABASE
all ко всем базам данных
postgres, my_db конкретное имя базы
replication специальное ключевое слово для подключения репликации (WAL streaming)
samerole пользователь может подключиться к базе, только если её имя совпадает с его именем
@filename можно вынести список баз в отдельный файл
USER
all любой пользователь
postgres, app_user конкретное имя пользователя
+group_name любой пользователь, входящий в эту группу (роль). Плюс обязателен
ADDRESS
Заполняется только для типов host....
IPv4 CIDR: 127.0.0.1/32 (только один IP), 192.168.1.0/24 (вся подсеть).
IPv6 CIDR: ::1/128 (localhost).
all вообще любой IP (0.0.0.0/0).
hostname example.com. Не рекомендуется использовать, так как требует DNS-запросов при каждом коннекте (медленно и зависит от DNS-сервера).
METHOD
trust Пустить без вопросов. Пароль не нужен. Опасно для сети, нормально для local на машине разработчика.
reject Отказать сразу. Полезно для бана конкретных IP.
scram-sha-256 Стандарт. Самый безопасный метод передачи пароля (Challenge-Response). Пароль не летает по сети.
md5 Старый стандарт. Хранит хеш MD5. Используй только для совместимости с очень старыми клиентами.
password Передает пароль открытым текстом. Использовать только внутри SSL-туннеля, иначе сниффер украдет пароль.
peer Работает только для local. Берет имя пользователя операционной системы и пускает, если оно совпадает с именем пользователя БД. Пароль не нужен.
ident То же, что peer, но для TCP. Спрашивает у Ident-сервера (порт 113) на машине клиента "кто это?"
cert Аутентификация по SSL-сертификату клиента. Пароль не нужен, нужен файл сертификата
ldap / radius / pam Для интеграции с корпоративными системами (Active Directory и т.д.)
# TYPE DATABASE USER ADDRESS METHOD [OPTIONS]
host all all 192.168.1.0/24 scram-sha-256
# 1. Админ базы (postgres) заходит из консоли сервера без пароля
local all postgres peer
# 2. Локальные сервисы (cron, скрипты) через сокет - по паролю
local all all scram-sha-256
# 3. Приложения с этого же сервера через TCP (127.0.0.1)
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
# 4. Доступ из офисной подсети (только SSL!)
hostssl all all 192.168.1.0/24 scram-sha-256
# 5. Репликация (только для спец. пользователя replicator из конкретной подсети)
host replication replicator 10.0.0.0/8 scram-sha-256