add db
Az add db egy második, önálló adatbázis-kapcsolatot ad egy modulhoz, a default mellé. Akkor nyúlj hozzá, ha egy modulnak saját poolra van szüksége: külön analytics adatbázisra, egy reporting replikára, vagy bármilyen kapcsolatra, ami nem osztozhat tranzakción a modul default kapcsolatával.
go tool gpsystem add db <modul> <név> [--connector pgx|bun]
Minden modulnak van már egy default kapcsolata (cfg.DB / pool), amit az egész projektre a new project --db választ ki. Az add db egy modulhoz ad hozzá egy másik, önálló kapcsolatot: saját DB_<NÉV>_* configot, saját pgx poolt (opcionálisan dbx/bunx-nal becsomagolva), saját closert, és <Név>DB / <Név>Transactor mezőket a modul Dependencies-én.
go tool gpsystem add db news analytics --connector bun
| Flag | Jelentés |
|---|---|
--connector | pgx vagy bun ehhez a kapcsolathoz (alapértelmezés: a projekt saját --db választása) |
A connector a kapcsolat tulajdonsága, nem a projekté: egy modulnak lehet pgx-natív default kapcsolata és emellett bun-alapú analytics kapcsolata, vagy fordítva. Ez nem stílus kérdés, hanem kemény határ; lásd a Tranzakciók oldalt: egy pgx-natív dbx/pg executor és egy dbx/bunx nem oszthat meg egy tranzakciót, így egy kapcsolat connectora hívásonként nem változhat.
Mit generál
DBAnalytics dbx.Config `envPrefix:"DB_ANALYTICS_"`
analyticsPool := pg.MustNewPool(ctx, cfg.DBAnalytics)
analyticsBun := bunx.Open(analyticsPool) // csak --connector bun esetén
type Dependencies struct {
DB *pg.DB
Transactor dbx.Transactor
AnalyticsDB *bun.DB
AnalyticsTransactor dbx.Transactor
// gpsystem:dependencies
}
A pool closere mellé egy másik is regisztrálódik (analytics-pgxpool, és bun connector esetén analytics-bun, mivel a bun closer a pool utánra kerül, így a graceful shutdown LIFO sorrendje a bun handle-t zárja a pool előtt). Ha a cmd/worker/main.go már létezik, ugyanez a pool/deps/closer bekötés odakerül, így a listenerek és jobok is látják a kapcsolatot ugyanazon a Dependencies structon.
A .env.example kap egy DB_ANALYTICS_* blokkot, amely a default kapcsolattal azonos lokális Postgresre mutat. Helyi fejlesztéshez irányítsd át egy másik instance-ra. A DB_ANALYTICS_USER, DB_ANALYTICS_PASSWORD és DB_ANALYTICS_NAME kötelező: hiányuk esetén a process már indulásnál elhal, nem az első lekérdezésnél; lásd a konfigurációs referenciát.
cmd/migrate mindig csak a projekt default kapcsolatát célozza. Egy nevesített kapcsolat sémáját a generált migrációs runner nem kezeli.A modul-repository bekötése
Az add db önmagában csak elérhetővé teszi a kapcsolatot a Dependencies-en; a modul repository-jához nem nyúl. A modul közös repository/-vázát az add surface --db (vagy az add core --db, ugyanígy egy meglévő modul repository-jához) köti hozzá:
go tool gpsystem add surface news reports --db analytics
# -> internal/modules/news/repository/analytics/doc.go
A --db nélkül a modul megtartja a flat repository/ mappát, a default kapcsolathoz kötve; semmi nem változik azokban a projektekben, amelyek sosem hívják az add db-t.
Hibaelhárítás: hiányzó anchorok
Az add db írás előtt ellenőrzi, hogy a cmd/<modul>/main.go-ban megvan-e a gpsystem:pools és a gpsystem:closers anchor. Ha valamelyik anchor-komment hiányzik, a parancs megáll, és kiírja a pontos két kommentsort, amit kézzel be kell szúrni (a helyükért lásd egy frissen generált projektet); a beszúrás után futtasd újra.