Files

45 lines
1.0 KiB
Go

package main
import (
"fmt"
"log"
"regexp"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"github.com/sundynix/pets-be/internal/config"
)
var databaseName = regexp.MustCompile(`^[a-zA-Z0-9_-]+$`)
// dbinit creates the configured PostgreSQL database once. It does not change other databases.
func main() {
cfg, err := config.Load()
if err != nil {
log.Fatal(err)
}
name := cfg.Postgres.Database
if !databaseName.MatchString(name) {
log.Fatal("invalid database name")
}
maintenance := cfg.Postgres
maintenance.Database = "postgres"
db, err := gorm.Open(postgres.Open(maintenance.DSN()), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
var count int64
if err := db.Raw("SELECT count(*) FROM pg_database WHERE datname = ?", name).Scan(&count).Error; err != nil {
log.Fatal(err)
}
if count > 0 {
log.Printf("database %s already exists", name)
return
}
if err := db.Exec(fmt.Sprintf("CREATE DATABASE \"%s\"", name)).Error; err != nil {
log.Fatal(err)
}
log.Printf("created database %s", name)
}