1a72fbb7207e46b6204c00a022ee2c2d70cc1370
pg-stand-sync
Перенос базы PostgreSQL со стенда на локальный сервер: pg_dump -Fc → пересоздание локальной БД → pg_restore -j.
Только stdlib Python 3.10+, внешних зависимостей нет. Утилиты берутся из поставки pgAdmin 4.
Быстрый старт
copy config.example.json config.json
Заполнить source (стенд) и target (локальная PG), затем:
python pg_stand_sync.py
config.json в .gitignore — пароли в репозиторий не попадают.
Ключи
| Ключ | Что делает |
|---|---|
-c, --config PATH |
другой конфиг (несколько стендов — несколько json) |
--dump-only |
снять дамп со стенда и остановиться |
--restore-only FILE |
залить готовый .dump локально, без обращения к стенду |
--no-recreate |
не делать DROP/CREATE DATABASE, накатить поверх (pg_restore --clean --if-exists) |
--dry-run |
напечатать команды, ничего не выполнять |
Конфиг
| Поле | Значение по умолчанию | Смысл |
|---|---|---|
pg_bin_dir |
из PATH |
каталог с pg_dump.exe, pg_restore.exe, psql.exe |
dump_dir |
dumps |
куда складывать дампы (относительный путь — от каталога скрипта) |
keep_dumps |
5 |
сколько последних дампов хранить, 0 — не чистить |
source.password_env |
— | имя переменной окружения с паролем вместо password в файле |
target.recreate |
true |
DROP + CREATE локальной базы перед восстановлением |
dump.schemas / exclude_* |
[] |
ограничение состава: схемы, таблицы, данные таблиц |
restore.jobs |
4 |
параллельные воркеры pg_restore |
restore.exit_on_error |
false |
падать на первой ошибке восстановления |
post_restore_sql |
[] |
список SQL, выполняемых в целевой базе после восстановления |
Пароли можно не хранить в файле: задать password_env и передать значение через окружение
($env:STAND_PGPASSWORD = '...'). Пароль всегда уходит в дочерний процесс через PGPASSWORD,
в командной строке не появляется.
Как это работает
config.json
│
├─ pg_dump -Fc ──► dumps/<db>-<timestamp>.dump (стенд, только чтение)
│
├─ psql: pg_terminate_backend → DROP DATABASE → CREATE DATABASE (локально)
│
├─ pg_restore --jobs N --no-owner --no-privileges
│
└─ post_restore_sql: анонимизация, правка настроек, GRANT'ы
Обезличивание данных стенда, если оно нужно, делается через post_restore_sql — уже в локальной
базе, чтобы стенд оставался нетронутым.
Description
Перенос базы PostgreSQL со стенда на локальную PG: pg_dump -Fc + pg_restore, конфиг в JSON
Languages
Python
100%