This commit is contained in:
qsc
2026-07-12 19:18:26 +08:00
parent dd588b5daa
commit 34ec65c8b5
52 changed files with 10859 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
// Command dbinit creates the configured PostgreSQL database when it is absent.
package main
import (
"context"
"flag"
"fmt"
"log"
"net/url"
"github.com/jackc/pgx/v5"
)
func main() {
dsn := flag.String("dsn", "", "PostgreSQL DSN for the target database")
flag.Parse()
parsed, err := url.Parse(*dsn)
if err != nil || parsed.Path == "" {
log.Fatal("无效 DSN")
}
database := parsed.Path[1:]
parsed.Path = "/postgres"
conn, err := pgx.Connect(context.Background(), parsed.String())
if err != nil {
log.Fatal(err)
}
defer conn.Close(context.Background())
var exists bool
err = conn.QueryRow(context.Background(), "SELECT EXISTS(SELECT 1 FROM pg_database WHERE datname=$1)", database).Scan(&exists)
if err != nil {
log.Fatal(err)
}
if !exists {
_, err = conn.Exec(context.Background(), "CREATE DATABASE "+pgx.Identifier{database}.Sanitize())
if err != nil {
log.Fatal(err)
}
}
fmt.Printf("database %s ready\n", database)
}