Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pgsql/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ PostgreSQL / Postgres Pro для 1С: установка, бэкапы, отка
| `pg_setup.sh` | Установка и первичная настройка Postgres Pro 1C на Debian/Ubuntu: локали, часовой пояс, репозиторий, initdb с `--tune=1c`, pg_hba, пароль postgres. Параметры: `--pgver`, `--timezone`, `--lang`, `--postgres-pass`. Запуск от root. |
| `backup-db.sh` | Бэкап (pg_dump + pigz, с проверкой целостности архива) и обслуживание (vacuumdb) баз PostgreSQL / Postgres Pro по списку из файла. Ротация бэкапов отдельно по каждой БД, логов — по возрасту. Для cron. |
| `backup-pg.conf.example` | Пример конфига для `backup-db.sh` (копируется в `/etc/backup-pg.conf`): пути, retention, каталог бинарников. |
| `pg-status/` | Go-утилита: состояние экземпляров (кластеров) PostgreSQL / Postgres Pro — запущен/остановлен, порт, каталог и его размер, суммарный вес и список баз, аптайм, соединения, cache hit, commit/rollback. Read-only. См. `pg-status/README.md`. |
| `pgpro/` | Рабочие скрипты Postgres Pro, перенесённые «как есть» с боевых серверов: wal-g, pg_probackup, обслуживание, добавление кластера, systemd-таймер. См. `pgpro/README.md`. |

Зависимости `backup-db.sh`: `pigz`. Список баз — текстовый файл (по умолчанию `/var/lib/pgpro/scripts/DB`), по одной базе на строку, `#` — комментарий.
Expand Down
10 changes: 6 additions & 4 deletions pgsql/pg-server-manager.sh
Original file line number Diff line number Diff line change
Expand Up @@ -870,7 +870,8 @@ list_instances_text() {
# точно как штатный тулинг Postgres Pro: per-instance EnvironmentFile с PGDATA +
# универсальный drop-in (через %I), который тянет этот файл и задаёт PGPORT.
wire_template_instance() {
local ver=$1 name=$2 datadir=$3 unit="postgrespro-$ver@$name"
local ver=$1 name=$2 datadir=$3
local unit="postgrespro-$ver@$name"
cat > "/etc/default/postgrespro-$ver-$name" <<EOF
PGDATA=$datadir
EOF
Expand All @@ -888,7 +889,8 @@ EOF
# Прописать обвязку под LEGACY dash-схему (для пакетов без шаблонного @-юнита):
# копия штатного юнита, переключённая на собственный EnvironmentFile, + drop-in.
wire_dash_instance() {
local ver=$1 name=$2 datadir=$3 port=$4 stock=$5 unit="postgrespro-$ver-$name"
local ver=$1 name=$2 datadir=$3 port=$4 stock=$5
local unit="postgrespro-$ver-$name"
local defdir; defdir=$(instance_datadir "$ver" default)
cat > "/etc/default/$unit" <<EOF
PGDATA=$datadir
Expand All @@ -915,8 +917,8 @@ create_instance() {

# Выбор схемы: если пакет даёт шаблонный @-юнит — используем его (как на проде),
# иначе откатываемся на самодельную копию штатного юнита (legacy dash).
local tmpl stock scheme unit
if tmpl=$(template_unit_path "$ver"); then
local stock scheme unit
if template_unit_path "$ver" >/dev/null; then
scheme="template"
elif stock=$(stock_unit_path "$ver"); then
scheme="dash"
Expand Down
67 changes: 67 additions & 0 deletions pgsql/pg-status/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# pg-status

Read-only утилита на Go: показывает состояние экземпляров (кластеров)
PostgreSQL / Postgres Pro на хосте. Ничего не меняет.

Понимает обе схемы размещения:

- **Postgres Pro 1C** — `postgrespro-<ver>` (default), `postgrespro-<ver>-<имя>`
(legacy), `postgrespro-<ver>@<порт>` (штатный шаблонный юнит), сборки в
`/opt/pgpro/<ver>`;
- **обычный PostgreSQL** — `postgresql@<ver>-<cluster>` (схема Debian/Ubuntu).

Для каждого экземпляра:

- статус systemd (запущен / остановлен / сбой) и порт;
- каталог данных (PGDATA) и его размер на диске (виден и у остановленного);
- если запущен — по данным сервера: версия, аптайм, число соединений и
`max_connections`, суммарный вес всех БД, cache hit ratio, commit/rollback
и список баз с размерами по убыванию (шаблонные помечены).

## Сборка

```sh
cd pgsql/pg-status
go build -o pg-status . # только стандартная библиотека, без зависимостей
```

## Запуск

```sh
./pg-status # все найденные экземпляры
./pg-status 5433 # фильтр по подстроке (имя юнита / метка / порт)
./pg-status -p 5432 # прямой опрос порта, в обход systemd
./pg-status -p 5433 -bin /opt/pgpro/1c-18/bin
./pg-status --no-color # без ANSI-цвета (авто-выключается вне терминала и при NO_COLOR)
```

Статистика БД собирается через `psql` с peer-аутентификацией от пользователя
`postgres`, поэтому запускать нужно **от root** (использует `runuser`/`sudo`
для перехода в `postgres`) **или от самого `postgres`**. Информация из systemd и
размер каталога на диске доступны и без этих прав.

## Пример вывода

```
Состояние PostgreSQL / Postgres Pro 2026-07-12 14:20:01

Postgres Pro 1c-18 (postgrespro-1c-18@5433)
Статус: ● запущен порт 5433
Каталог: /var/lib/pgpro/1c-18/data-5433
Размер на ФС: 5.1GiB
Версия: 17.4
Аптайм: 1д 2ч 3м
Соединения: 12 / 100 (активных запросов: 3)
Суммарно БД: 5.0GiB
Cache hit: 99.7% commit: 123456 rollback: 42
База Размер
buh 3.0GiB
zup 1.9GiB
postgres 8.0MiB
template1 7.0MiB (шаблон)
```

## Зависимости

`systemctl`, `ss` (iproute2), `du`, `psql`. Порт определяется по слушающему
сокету postmaster, затем `postgresql.conf`, затем `PGPORT` из systemd.
3 changes: 3 additions & 0 deletions pgsql/pg-status/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module pg-status

go 1.24
Loading
Loading