aboutsummaryrefslogtreecommitdiffstats
path: root/internal/db/db.go
diff options
context:
space:
mode:
authorgrm <grm@eyesin.space>2026-09-14 00:51:19 +0300
committergrm <grm@eyesin.space>2026-09-14 00:51:19 +0300
commit282d2ab3e0fb3a74f32160a231225773001acd14 (patch)
treeb15c105c0c5d79467d3b815af4c67f5bf4a02d9d /internal/db/db.go
parent0de17af2318134549fa6f4db822ba6921b35f12f (diff)
downloadblogspace-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.go18
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
}