# db-presets

> Command line tools and API to work with PostgreSQL database presets. Useful for testing.

Latest version **0.1.28** (published 2019-12-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install db-presets
pnpm add db-presets
yarn add db-presets
bun add db-presets
```

Provides the command `db-p`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.28 |
| Published | 2019-12-26 |
| First published | 2019-11-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=10.15.3 |
| Dependencies | 3 |
| Unpacked size | 79.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | yes |
| GitHub stars | 0 |
| Author | Dzenly |
| Maintainers | dzenly |
| Keywords | PostgreSQL, dump, preset, manager |

## Links

- npm: https://www.npmjs.com/package/db-presets
- Repository: https://github.com/Dzenly/db-presets
- Homepage: https://github.com/Dzenly/db-presets#readme
- Issues: https://github.com/Dzenly/db-presets/issues
- npm.io page: https://npm.io/package/db-presets

## Dependencies (3)

- [winston](https://npm.io/package/winston.md) ^2.4.4
- [dz-log-prefix](https://npm.io/package/dz-log-prefix.md) ^0.3.6
- [dz-timer-utils](https://npm.io/package/dz-timer-utils.md) ^0.1.2

## Recent versions

- 0.1.28 (latest) — 2019-12-26
- 0.1.27 — 2019-12-25
- 0.1.26 — 2019-12-25
- 0.1.25 — 2019-12-25
- 0.1.24 — 2019-12-25
- 0.1.23 — 2019-12-24
- 0.1.22 — 2019-12-24
- 0.1.21 — 2019-12-19
- 0.1.20 — 2019-12-19
- 0.1.19 — 2019-12-18
- 0.1.18 — 2019-12-18
- 0.1.17 — 2019-12-18
- 0.1.16 — 2019-12-17
- 0.1.15 — 2019-12-13
- 0.1.14 — 2019-12-10
- … 15 more at https://npm.io/package/db-presets/versions

## README

# db-presets

Тулза для работы с пресетами (дампами) PostgreSQL.

## Фичи

* Хранит пресеты на [Amazon S3](https://aws.amazon.com/s3/) в заархивироанном и зашифрованном виде.
* Позволяет:
    * забирать нужные пресеты с Amazon S3,
    * заливать обратно отредактированные,
    * смотреть список существующих пресетов,
    * создавать новые пресеты и заливать их на Amazon S3.
* Поддерживает блокировку объектов на запись.
* Хранит историю изменений объекта.
* Логирует действия пользователя.

## Требования и пререквизиты

* Linux
* xz, rsync, PostgreSQL.
* Node.js >= 10.15.3
* Установленное приложение, которое будет работать с базой данных.
* Настроенное ведро (bucket) на Amazon S3 ([как настраивать](docs/amazon-s3-setup.md)).
* [Установить AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)
* Перед установкой заполните все [переменные окружения](docs/env-vars.md)
* Если вы не root:
    * добавьте своего юзера в sudoers.
    * и дайте ему беспарольный доступ к `chown`, `chmod`, `rsync` и командам, нужным для запуска и остановки PostgreSQL.
    * пример строки из `/etc/sudoers`: `alexey ALL = (root) NOPASSWD: /bin/chown, /bin/chmod, /usr/sbin/service postgresql start, /usr/sbin/service postgresql stop, /usr/bin/rsync`
    * добавьте своего пользователя в группу postgres.

## Установка глобально

* `npm i -g db-presets` (для root используйте `npm i --unsafe -g db-presets`).
* В системе появится утилита `db-p`, и создадутся директории для вашей ветки.
* Если вы хотите сменить репозиторй или ветку - меняте переменные окружения, и запускаете `db-p init`.
* Помощь по командам можно посмотреть так: `db-p -h`.

## Установка, чтобы использовать API в коде

`npm i -S db-presets`

## [Детальное описание команд](docs/cmds-help.md)

## [Сценарии использования](docs/use-cases.md)

## Файлы и папки.

* Папка с sql пресетами и описанием измнений.
Рядом с каждым `sql` файлом лежит одноименный `*-clog.txt` фал.
* Папка с data директориями, созданными pg_basebackup.
* Папка c зашифрованными архивами пресетов, дубликаты этих архивов заливаются на Amazon S3.
* `~/.aws/config` - конфиг aws cli утилиты, выглядит примерно так:

```
[profile r-vision-r]
region = eu-central-1
output = json
[profile r-vision-rw]
region = eu-central-1
output = json
```
* `~/.aws/credentials` - креденшлзы для aws cli, выглядит примерно так:

```
[r-vision-r]
aws_access_key_id = bla-bla
aws_secret_access_key = bla-bla
[r-vision-rw]
aws_access_key_id = bla-bla
aws_secret_access_key = bla-bla
```

* Файл с AES ключом и вектором инициализации. Создается `db-p gen-key`. Записывается по пути, указанному в DBP_AESKEY_PATH.

* Лог действий пользователя. Записывается по пути, указанному в DBP_LOGFILE.

* Папка с внутренними данными тулзы. Лежит в ~/.db-presets

## Рекомендации

* Делать пресеты, нужно по-возможности на релизных ветках, чтобы на них всегда можно было накатить миграции от тестовой ветки,
или от фиче - веток. Если пресет нужен для тестирования ещё не влитой в релиз фичи, то никуда не денешься, придется создавать
временные пресеты для тестовой (development, stage) ветки. Но для этого в ведре на Amazon S3 нужно создать папку для тестовой ветки.

* В каждой релизной ветке должен быть свой набор пресетов. Допускается, чтобы пресет создавался от пресета старой ветки накатом
миграций с новой ветки.

* В пресетах должны быть только необходимые данные,
  т.к. с большими пресетами снизится скорость работы и увеличится плата за S3.
  И просто не стоит копить мусор в пресетах, ведь от них наследуются пресеты для следующих релизов,
  и мусор будет копиться как снежный ком.

* Название пресета должно быть информативным. Чтобы и тестировщики понимали какой пресет использовать для тестов,
и какой пресет расширять для того или иного тест кейса.

* Нужны универсальные пресеты, которые будут использоваться для большинства тестов, и специфические пресеты, для тестирования частностей.

* По-возможности, названия и свойства сущностей в БД должно быть на английском языке,
чтобы было меньше различий между английской и русской версиями приложения.

* Имена сущностей должно быть информативными.
Смысл такой: у каждого писателя тескейсов должно быть понимание какие сущности он может юзать для своих кейсов.
Если там device1, user1, host1, то писатель не поймет что это, и сделает свои user2, host2, и т.д., и будет мусорка.

* Если непонятно название сущности, которую кто-то создал, можете улучшить название, и поменять название во всех местах,
где оно используется (другие тесткейсы, автотесты, и т.д.). Принцип скаута и рефакторинги работают и здесь.

* Т.е. надо постоянно следить за порядком в пресетах, и не допускать там бардака. Иначе потом бардак будет наследоваться
в следующей версии, и разрастаться.

## Лицензия (license)

[MIT](LICENSE)

---
_Source: https://npm.io/package/db-presets · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
