@@ -74,13 +74,14 @@ func ChangePassword(ctx context.Context, pg *pgx.Conn, username, password string
7474
7575func CreateDatabaseWithOwner (ctx context.Context , pg * pgx.Conn , name , owner string ) error {
7676 dbInfo , err := FindDatabase (ctx , pg , name )
77- if err != nil && err != pgx . ErrNoRows {
77+ if err != nil {
7878 return err
7979 }
80- // Database already exists.
80+
8181 if dbInfo != nil {
8282 return nil
8383 }
84+
8485 sql := fmt .Sprintf ("CREATE DATABASE %s OWNER %s;" , name , owner )
8586 _ , err = pg .Exec (ctx , sql )
8687
@@ -89,7 +90,7 @@ func CreateDatabaseWithOwner(ctx context.Context, pg *pgx.Conn, name, owner stri
8990
9091func CreateDatabase (ctx context.Context , pg * pgx.Conn , name string ) error {
9192 dbInfo , err := FindDatabase (ctx , pg , name )
92- if err != nil && err != pgx . ErrNoRows {
93+ if err != nil {
9394 return err
9495 }
9596 // Database already exists.
@@ -197,7 +198,7 @@ func ListDatabases(ctx context.Context, pg *pgx.Conn) ([]DbInfo, error) {
197198 }
198199 defer rows .Close ()
199200
200- values := []DbInfo {}
201+ var values []DbInfo
201202
202203 for rows .Next () {
203204 di := DbInfo {}
@@ -210,23 +211,19 @@ func ListDatabases(ctx context.Context, pg *pgx.Conn) ([]DbInfo, error) {
210211 return values , nil
211212}
212213
213- func FindDatabase (ctx context.Context , pg * pgx.Conn , name string ) (* DbInfo , error ) {
214- sql := `
215- SELECT
216- datname,
217- (SELECT array_agg(u.usename::text order by u.usename) FROM pg_user u WHERE has_database_privilege(u.usename, d.datname, 'CONNECT')) as allowed_users
218- FROM pg_database d WHERE d.datname='%s';
219- `
220-
221- sql = fmt .Sprintf (sql , name )
222- row := pg .QueryRow (ctx , sql )
223-
224- db := new (DbInfo )
225- if err := row .Scan (& db .Name , & db .Users ); err != nil {
214+ func FindDatabase (ctx context.Context , conn * pgx.Conn , name string ) (* DbInfo , error ) {
215+ dbs , err := ListDatabases (ctx , conn )
216+ if err != nil {
226217 return nil , err
227218 }
228219
229- return db , nil
220+ for _ , db := range dbs {
221+ if db .Name == name {
222+ return & db , nil
223+ }
224+ }
225+
226+ return nil , nil
230227}
231228
232229type UserInfo struct {
@@ -260,7 +257,7 @@ func ListUsers(ctx context.Context, pg *pgx.Conn) ([]UserInfo, error) {
260257 }
261258 defer rows .Close ()
262259
263- values := []UserInfo {}
260+ var values []UserInfo
264261
265262 for rows .Next () {
266263 ui := UserInfo {}
0 commit comments