new migration
A new migration egyetlen, üres SQL-migrációs fájlt scaffoldol, ütközésmentes időbélyeg-prefixszel. Ezt használd, amikor a sémán végzett változtatáshoz saját migráció kell.
go tool gpsystem new migration <név>
Projekten belül futtasd (a CLI felfelé sétálva megtalálja a gpsystem.yaml-t). Létrehozza az aktuális időbélyeggel jelölt migrációs fájlt a migrations/ alatt, üres goose-vázzal: a SQL-t te írod bele, a futtatásról a projekt cmd/migrate binárisa gondoskodik.
Névképzés
A nevet a CLI snake_case-re normalizálja: kisbetűsít, a kötőjelet, aláhúzást és szóközt aláhúzásra egységesíti. A normalizált névnek kisbetű/számjegy szavakból kell állnia (útvonal-szeparátor, pont és vezető számjegy nélkül); ami nem felel meg, azt a parancs hibával elutasítja.
go tool gpsystem new migration create_products_and_orders
go tool gpsystem new migration "add index to orders" # -> add_index_to_orders
Időbélyeg
A parancs a létrehozás pillanatának UTC idejéből képez egy 14 jegyű YYYYMMDDHHMMSS prefixet (goose időbélyeg-séma), és ezt írja a fájlnév elé. Mivel az időbélyeg a generáláskori pillanatot rögzíti, garantáltan a migrations/ mappában meglévő fájlok után rendez, branch-ek között sem ütközik. Ha a mappában már szerepel ugyanaz a másodperc (két migráció ugyanabban a másodpercben), a parancs egy másodperccel előrébb lép, amíg szabad prefixet nem talál. A generált projektek 20200101000000_init.sql-lel és 20200101000100_outbox.sql-lel érkeznek (fix, korai időbélyeg), így az első saját migrációd mindig ezek után, a tényleges létrehozás időpontjával rendeződik:
go tool gpsystem new migration create_products_and_orders
# Migration created: migrations/20260720143012_create_products_and_orders.sql
Régebbi, még sorszámozott sémájú projektben (00001_init.sql, 00002_outbox.sql) is hibátlanul működik: a parancs csak a 14 jegyű időbélyeg-prefixeket veszi figyelembe ütközésvizsgálatnál, a régi sorszámozott fájlokat érintetlenül hagyja, és goose mindkettőt szám szerint, helyesen sorba rendezi.
Mit generál
Egyetlen fájlt: migrations/<időbélyeg>_<név>.sql, üres fel/le vázzal:
-- +goose Up
-- +goose StatementBegin
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
-- +goose StatementEnd
A globális --dry-run (tervet nyomtat, nem ír semmit) és --force (meglévő fájl felülírása) flagek itt is működnek, mint minden alparancson.
Generálás után
Írd meg a SQL-t a markerek közé (a Up szakaszba a változást, a Down-ba a visszagörgetését), majd alkalmazd:
go run ./cmd/migrate up
A fájlformátumról, a cmd/migrate parancsairól és a deployment-mintákról a Migrációk oldal szól.