Skip to content

Commit c12a902

Browse files
authored
Surface error and simplify ListDatabases function (#143)
* Surface error and simplify ListDatabases function * Fix lint
1 parent 649bcb5 commit c12a902

File tree

2 files changed

+17
-20
lines changed

2 files changed

+17
-20
lines changed

internal/flypg/admin/admin.go

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,14 @@ func ChangePassword(ctx context.Context, pg *pgx.Conn, username, password string
7474

7575
func 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

9091
func 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

232229
type 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{}

internal/flypg/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ func (n *Node) PostInit(ctx context.Context) error {
329329

330330
// Setup repmgr database and extension
331331
if err := n.RepMgr.enable(ctx, conn); err != nil {
332-
fmt.Printf("failed to setup repmgr: %s\n", err)
332+
return fmt.Errorf("failed to enable repmgr: %s", err)
333333
}
334334

335335
// Register ourself as the primary

0 commit comments

Comments
 (0)