跳转到主要内容
数据库由内嵌在 rest.Rest 中的 Databases 接口暴露。它们在 Standard、Pro 和 Enterprise 套餐上可用。
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)

创建数据库

api.CreateDatabase(opts) 依据 squarecloud.DatabaseCreateOptions 置备一个新数据库。
created, err := api.CreateDatabase(squarecloud.DatabaseCreateOptions{
	Name:    "my-mongo",
	Memory:  1024,
	Type:    squarecloud.DatabaseTypeMongo,
	Version: "8",
})
if err != nil {
	panic(err)
}

fmt.Println(created.ID)
fmt.Println(created.ConnectionURL) // ready to use — password already embedded
fmt.Println(created.Password)      // shown once — store securely
fmt.Println(created.Certificate)   // shown once — only for engines that issue a TLS cert
字段类型说明
Namestring显示名称,1–32 个字符
Memoryint分配的内存(MB)
Typesquarecloud.DatabaseType引擎:DatabaseTypeMongoDatabaseTypeMySQLDatabaseTypeRedisDatabaseTypePostgres(slug 为 mongomysqlredispostgres
Versionstring引擎版本
Password(以及适用时的 Certificate仅出现在创建响应中,之后无法找回 —— 请立即保存。ConnectionURL 已嵌入密码,开箱即用。
不受支持的类型会失败,报错代码为 INVALID_DATABASE_TYPE;内存对该套餐来说过小会失败,报错代码为 INSUFFICIENT_MEMORY;置备过程中出现故障会失败,报错代码为 DATABASE_CREATION_FAILED

列出你的数据库

api.GetDatabases() 以精简的 squarecloud.UserDatabase 描述符列出你拥有的每个数据库:
dbs, err := api.GetDatabases()
if err != nil {
	panic(err)
}

for _, db := range dbs {
	fmt.Printf("%s (%s)\n", db.Name, db.ID)
}

获取单个数据库

db, err := api.GetDatabase("abc123def456abc123def456")
if err != nil {
	panic(err)
}

fmt.Println(db.ID, db.Name, db.Type, db.RAM, db.Cluster, db.CreatedAt)

生命周期

err := api.StartDatabase("abc123def456abc123def456")
if err != nil {
	panic(err)
}

err = api.StopDatabase("abc123def456abc123def456")

状态与指标

数据库的状态和指标 endpoint 与应用的共享同样的结构(它们是类型别名)—— 逐字段说明参见管理应用
status, err := api.GetDatabaseStatus("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(status.Status, status.CPU, status.RAM) // formatted strings

raw, err := api.GetDatabaseStatusRaw("abc123def456abc123def456") // numeric values
if err != nil {
	panic(err)
}

metrics, err := api.GetDatabaseMetrics("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(len(metrics), "metric points (up to 288 over 24h)")

每个数据库的摘要状态

list, err := api.GetDatabaseListStatus()
if err != nil {
	panic(err)
}

for _, summary := range list {
	fmt.Printf("%s → running=%v\n", summary.ID, summary.Running)
}

更新

api.UpdateDatabase(dbID, opts) 修改显示名称和/或内存分配。至少必须提供一个字段。
err := api.UpdateDatabase("abc123def456abc123def456", squarecloud.DatabaseUpdateOptions{
	Name: "primary-db",
	RAM:  1024,
})
if err != nil {
	panic(err)
}

凭据

api.GetDatabaseCertificate(dbID) 返回 TLS 证书(base64 编码的 PEM):
cert, err := api.GetDatabaseCertificate("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println("certificate length:", len(cert))
api.ResetDatabaseCredentials(dbID, reset) 使用 squarecloud.DatabaseReset* 常量轮换密码或证书:
// Rotate the password — the new value is shown only once
result, err := api.ResetDatabaseCredentials("abc123def456abc123def456", squarecloud.DatabaseResetPassword)
if err != nil {
	panic(err)
}
fmt.Println("new password:", result.Password)

// Rotate the certificate — fetch the new one via GetDatabaseCertificate
_, err = api.ResetDatabaseCredentials("abc123def456abc123def456", squarecloud.DatabaseResetCertificate)
新密码仅在密码重置响应中返回,且只显示一次 —— 请立即保存。

Snapshots

数据库 snapshot 与应用的 snapshot API 相对应 —— 参见 Snapshots
snapshots, err := api.GetDatabaseSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

created, err := api.CreateDatabaseSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println("download URL:", created.URL)

删除数据库

删除数据库不可逆。如果你日后可能需要恢复数据,请确保你有一个近期的 snapshot
err := api.DeleteDatabase("abc123def456abc123def456")
if err != nil {
	panic(err)
}