diff options
| author | grm <grm@eyesin.space> | 2026-09-14 00:51:19 +0300 |
|---|---|---|
| committer | grm <grm@eyesin.space> | 2026-09-14 00:51:19 +0300 |
| commit | 282d2ab3e0fb3a74f32160a231225773001acd14 (patch) | |
| tree | b15c105c0c5d79467d3b815af4c67f5bf4a02d9d /internal/db/db.go | |
| parent | 0de17af2318134549fa6f4db822ba6921b35f12f (diff) | |
| download | blogspace-282d2ab3e0fb3a74f32160a231225773001acd14.tar.gz blogspace-282d2ab3e0fb3a74f32160a231225773001acd14.tar.bz2 blogspace-282d2ab3e0fb3a74f32160a231225773001acd14.zip | |
Drop the single-database split and re-baseline the control migrations
Every deployment has been through the per-blog split, so the code that
performed it (split.go, control migrations 00002–00007) is dead weight, and a
fresh install replaying six migrations only to drop the tables again was
silly. The control chain is now a single 00001_init.sql with the final users
and blogs shape, matching the blog chain.
Goose ignores versions recorded in the database that no longer exist in the
source, but refuses a future migration numbered below the database's highest
version. Databases that went through the split therefore need
`DELETE FROM goose_db_version WHERE version_id > 1` once; README and
AGENTS.md say so.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sd8UPWrvyYCLj97JexNw3A
Diffstat (limited to 'internal/db/db.go')
| -rw-r--r-- | internal/db/db.go | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/internal/db/db.go b/internal/db/db.go index 601680d..0f66fcc 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -139,12 +139,7 @@ func (c *Cluster) CreateBlogDB(ctx context.Context, dbName string) error { return nil } -// execer is the pool or connection createDatabase runs on. -type execer interface { - Exec(ctx context.Context, sql string, args ...any) (pgconn.CommandTag, error) -} - -func createDatabase(ctx context.Context, db execer, dbName string) error { +func createDatabase(ctx context.Context, db *pgxpool.Pool, dbName string) error { _, err := db.Exec(ctx, `CREATE DATABASE `+pgx.Identifier{dbName}.Sanitize()) var pgErr *pgconn.PgError if errors.As(err, &pgErr) && pgErr.Code == "42P04" { // duplicate_database @@ -169,10 +164,9 @@ func (c *Cluster) DropBlogDB(ctx context.Context, dbName string) error { // ---- migrations ------------------------------------------------------------ -// MigrateControl applies the control database migrations, including the Go -// migration that moves content out into the blog databases. +// MigrateControl applies the control database migrations. func MigrateControl(ctx context.Context, controlURL string) error { - return migrate(ctx, controlURL, "migrations/control", goose.WithGoMigrations(splitMigration(controlURL))) + return migrate(ctx, controlURL, "migrations/control") } // MigrateBlog applies the blog schema migrations to one blog database. @@ -181,8 +175,8 @@ func MigrateBlog(ctx context.Context, blogURL string) error { } // migrate runs goose over database/sql. A Provider (rather than the package -// globals) keeps the two migration sets, and the Go migration, apart. -func migrate(ctx context.Context, dsn, dir string, opts ...goose.ProviderOption) error { +// globals) keeps the two migration sets apart. +func migrate(ctx context.Context, dsn, dir string) error { sqldb, err := sql.Open("pgx", dsn) if err != nil { return err @@ -192,7 +186,7 @@ func migrate(ctx context.Context, dsn, dir string, opts ...goose.ProviderOption) if err != nil { return err } - p, err := goose.NewProvider(goose.DialectPostgres, sqldb, fsys, opts...) + p, err := goose.NewProvider(goose.DialectPostgres, sqldb, fsys) if err != nil { return err } |
