Documentation
¶
Overview ¶
Package gomigr — DSL-мигратор PostgreSQL с топологической сортировкой по зависимостям. Используется как CLI (cmd/gomigr) и как Go-библиотека.
Публичный API библиотеки (тип Migrator, Options) реализуется в gomigr.go.
Реализация публичного фасада библиотеки gomigr: тип Migrator с методами Up, Down, Status, Close и конструктором New. CLI cmd/gomigr вызывает эти методы напрямую, не дублируя логику применения миграций.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrDownScopeRequired = errors.New("gomigr: DownOptions requires To, Steps or All")
ErrDownScopeRequired возвращается из Migrator.Down, если DownOptions не задаёт ни одно из полей To, Steps, All — библиотека отказывается гадать, что хотел вызывающий. Раньше "пустой toVersion" трактовался как "откатить всё"; теперь это явный opt-in через DownOptions.All.
var ErrLockBusy = store.ErrLockBusy
ErrLockBusy — другой инстанс gomigr уже держит advisory lock и работает с этой БД. Re-export из internal/store, чтобы потребители библиотеки могли сматчить ошибку через errors.Is, не зная про internal-пакет.
Functions ¶
This section is empty.
Types ¶
type DownOptions ¶ added in v1.0.1
type DownOptions struct {
// To — версия, до которой откатывать (откатываются applied с version > To).
To string
// Steps — откатить N последних applied-миграций по id; >0.
Steps int
// All — явно запросить откат всех applied. Эквивалент старого
// Down(ctx, ""), но требует явного opt-in. CLI поверх этого добавляет
// интерактивное подтверждение.
All bool
}
DownOptions — параметры Migrator.Down. Хотя бы одно из полей должно быть задано, иначе вернётся ErrDownScopeRequired.
type MigrationStatus ¶
type MigrationStatus struct {
ID int64
Version string
Name string
Status string
AppliedBy string
AppliedAt time.Time
}
MigrationStatus — одна строка вывода Migrator.Status().
type Migrator ¶
type Migrator struct {
// contains filtered or unexported fields
}
Migrator — публичный фасад библиотеки. Создаётся через New, всегда должен закрываться через Close.
func New ¶
New валидирует Options, открывает внутренний *sql.DB через pgx/stdlib в режиме simple protocol (для поддержки multi-statement в Up/Down SQL), пингует БД и создаёт schema_migrations при отсутствии.
Pool намеренно мал: SetMaxOpenConns(2), SetMaxIdleConns(1) — миграциям параллелизм не нужен, а второй слот нужен advisory-lock'у, занимающему одно соединение на всё время выполнения пачки.
func (*Migrator) Close ¶
Close закрывает внутренний *sql.DB. После Close использовать Migrator нельзя. Повторный вызов безопасен.
func (*Migrator) Down ¶
func (m *Migrator) Down(ctx context.Context, opts DownOptions) error
Down откатывает applied-миграции согласно DownOptions. Ровно одно из полей To, Steps, All должно быть задано (заданным считается непустой To, Steps > 0 или All == true); иначе возвращается ErrDownScopeRequired. Указание двух или более — ошибка взаимоисключения. Захватывает advisory lock на время выполнения.
func (*Migrator) Status ¶
func (m *Migrator) Status(ctx context.Context) ([]MigrationStatus, error)
Status возвращает все применённые миграции (включая помеченные checksum_mismatch), отсортированные по id — это хронологический порядок применения, проставляемый BIGSERIAL'ом при INSERT'е в schema_migrations.
func (*Migrator) Up ¶
Up применяет pending-миграции согласно UpOptions. Пустой UpOptions эквивалентен «применить всё pending без верхней границы». Захватывает advisory lock на время выполнения. Возвращает ErrLockBusy, если lock занят.
Валидация: Steps < 0 → ошибка до подключения к БД. Steps == 0 трактуется как «без ограничения» — симметрично пустому To.
type Options ¶
type Options struct {
// DSN — обязательная строка подключения PostgreSQL. Поддерживается
// как URL (postgres://...), так и keyword-формат pgx (host=... user=...).
DSN string
// MigrationsDir — обязательный путь к директории с *.sql миграциями.
MigrationsDir string
// User — значение для колонки applied_by. Пустая строка резолвится
// внутри библиотеки в os/user.Current() → "unknown".
User string
// Logger — *slog.Logger для всех сообщений. nil → дискардный handler.
Logger *slog.Logger
}
Options — параметры конструктора New. Поля заполняются вызывающим кодом (CLI делает это после загрузки YAML/ENV/флагов; внешние Go-приложения — программно). Библиотека сама ENV не читает.
type UpOptions ¶ added in v1.0.1
type UpOptions struct {
// To — верхняя граница version (включительно). Пустая строка — без границы.
To string
// Steps — ограничение количества применяемых pending-миграций (без учёта
// докачанных транзитивных зависимостей). 0 — без ограничения.
// Отрицательное значение — ошибка валидации.
Steps int
}
UpOptions — параметры Migrator.Up.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
gomigr
command
Бинарь gomigr — тонкая CLI-обёртка над библиотекой github.com/therox/gomigr.
|
Бинарь gomigr — тонкая CLI-обёртка над библиотекой github.com/therox/gomigr. |
|
Package config загружает настройки CLI gomigr из YAML и переменных окружения.
|
Package config загружает настройки CLI gomigr из YAML и переменных окружения. |
|
Пакет graph строит граф зависимостей миграций и выполняет топологическую сортировку.
|
Пакет graph строит граф зависимостей миграций и выполняет топологическую сортировку. |
|
internal
|
|
|
runner
Пакет runner — внутренний пакет, выполняющий пачку миграций.
|
Пакет runner — внутренний пакет, выполняющий пачку миграций. |
|
store
Пакет store — внутренняя обёртка над *sql.DB для работы с таблицей состояния schema_migrations и advisory lock'ом.
|
Пакет store — внутренняя обёртка над *sql.DB для работы с таблицей состояния schema_migrations и advisory lock'ом. |
|
Пакет parser реализует разбор файлов миграций в формате DSL gomigr.
|
Пакет parser реализует разбор файлов миграций в формате DSL gomigr. |