diff --git a/internal/data/database_user.go b/internal/data/database_user.go index 6a570cf2..dfefbc13 100644 --- a/internal/data/database_user.go +++ b/internal/data/database_user.go @@ -78,6 +78,9 @@ func (r databaseUserRepo) Create(req *request.DatabaseUserCreate) error { return err } for name := range slices.Values(req.Privileges) { + if err = mysql.DatabaseCreate(name); err != nil { + return err + } if err = mysql.PrivilegesGrant(req.Username, name, req.Host); err != nil { return err } @@ -99,6 +102,9 @@ func (r databaseUserRepo) Create(req *request.DatabaseUserCreate) error { return err } for name := range slices.Values(req.Privileges) { + if err = postgres.DatabaseCreate(name); err != nil { + return err + } if err = postgres.PrivilegesGrant(req.Username, name); err != nil { return err } @@ -145,6 +151,9 @@ func (r databaseUserRepo) Update(req *request.DatabaseUserUpdate) error { } } for name := range slices.Values(req.Privileges) { + if err = mysql.DatabaseCreate(name); err != nil { + return err + } if err = mysql.PrivilegesGrant(user.Username, name, user.Host); err != nil { return err } @@ -163,6 +172,9 @@ func (r databaseUserRepo) Update(req *request.DatabaseUserUpdate) error { } } for name := range slices.Values(req.Privileges) { + if err = postgres.DatabaseCreate(name); err != nil { + return err + } if err = postgres.PrivilegesGrant(user.Username, name); err != nil { return err } diff --git a/pkg/db/postgres.go b/pkg/db/postgres.go index c75f6d21..7334af8c 100644 --- a/pkg/db/postgres.go +++ b/pkg/db/postgres.go @@ -71,7 +71,15 @@ func (r *Postgres) Prepare(query string) (*sql.Stmt, error) { } func (r *Postgres) DatabaseCreate(name string) error { - _, err := r.Exec(fmt.Sprintf("CREATE DATABASE %s", name)) + // postgres 不支持 CREATE DATABASE IF NOT EXISTS,但是为了保持与 MySQL 一致,先检查数据库是否存在 + exist, err := r.DatabaseExist(name) + if err != nil { + return err + } + if exist { + return nil + } + _, err = r.Exec(fmt.Sprintf("CREATE DATABASE %s", name)) return err } diff --git a/web/src/views/database/CreateUserModal.vue b/web/src/views/database/CreateUserModal.vue index 94763335..0521b887 100644 --- a/web/src/views/database/CreateUserModal.vue +++ b/web/src/views/database/CreateUserModal.vue @@ -59,64 +59,71 @@ watch( :segmented="false" @close="show = false" > - - - - - - - - - - - - - - - - - - - - - - - - {{ $gettext('Submit') }} + + + {{ + $gettext('If the privilege databases does not exist, it will be created automatically. ') + }} + + + + + + + + + + + + + + + + + + + + + + + + + {{ $gettext('Submit') }} + diff --git a/web/src/views/database/UpdateServerModal.vue b/web/src/views/database/UpdateServerModal.vue index de3bc59d..8c5fa6fe 100644 --- a/web/src/views/database/UpdateServerModal.vue +++ b/web/src/views/database/UpdateServerModal.vue @@ -27,7 +27,7 @@ watch( () => show.value, (value) => { if (value && id.value) { - useRequest(database.serverGet(id.value)).onSuccess(({ data }) => { + useRequest(database.serverGet(id.value)).onSuccess(({ data }: { data: any }) => { updateModel.value.name = data.name updateModel.value.host = data.host updateModel.value.port = data.port diff --git a/web/src/views/database/UpdateUserModal.vue b/web/src/views/database/UpdateUserModal.vue index 39007a70..385e9547 100644 --- a/web/src/views/database/UpdateUserModal.vue +++ b/web/src/views/database/UpdateUserModal.vue @@ -24,7 +24,7 @@ watch( () => show.value, (value) => { if (value && id.value) { - useRequest(database.userGet(id.value)).onSuccess(({ data }) => { + useRequest(database.userGet(id.value)).onSuccess(({ data }: { data: any }) => { updateModel.value.password = data.password updateModel.value.privileges = data.privileges updateModel.value.remark = data.remark @@ -45,32 +45,39 @@ watch( :segmented="false" @close="show = false" > - - - - - - - - - - - - {{ $gettext('Submit') }} + + + {{ + $gettext('If the privilege databases does not exist, it will be created automatically. ') + }} + + + + + + + + + + + + + {{ $gettext('Submit') }} +