Skip to content

Commit

Permalink
feat(postgres): Add list DBs command
Browse files Browse the repository at this point in the history
  • Loading branch information
ondrejsika committed Aug 3, 2021
1 parent 2090689 commit 66a5473
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
1 change: 1 addition & 0 deletions cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
_ "github.com/sikalabs/slut/cmd/postgres"
_ "github.com/sikalabs/slut/cmd/postgres/create"
_ "github.com/sikalabs/slut/cmd/postgres/drop"
_ "github.com/sikalabs/slut/cmd/postgres/list"
"github.com/sikalabs/slut/cmd/root"
_ "github.com/sikalabs/slut/cmd/version"
"github.com/spf13/cobra"
Expand Down
26 changes: 26 additions & 0 deletions cmd/postgres/list/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package drop

import (
postgrescmd "github.com/sikalabs/slut/cmd/postgres"
"github.com/sikalabs/slut/utils/postgres"

"github.com/spf13/cobra"
)

var PostgresListCmd = &cobra.Command{
Use: "list",
Short: "list Postgres databases",
Args: cobra.NoArgs,
Run: func(c *cobra.Command, args []string) {
postgres.ListText(
postgrescmd.PostgresCmdFlagHost,
postgrescmd.PostgresCmdFlagPort,
postgrescmd.PostgresCmdFlagUser,
postgrescmd.PostgresCmdFlagPassword,
)
},
}

func init() {
postgrescmd.PostgresCmd.AddCommand(PostgresListCmd)
}
58 changes: 58 additions & 0 deletions utils/postgres/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package postgres

import (
"database/sql"
"fmt"

_ "github.com/lib/pq"
)

func List(
host string,
port int,
user string,
password string,
) ([]string, error) {
db, err := sql.Open(
"postgres", fmt.Sprintf(
"host=%s port=%d user=%s password=%s sslmode=disable",
host, port, user, password,
))
if err != nil {
return nil, err
}
defer db.Close()

rows, err := db.Query("SELECT datname FROM pg_database;")
if err != nil {
return nil, err
}
defer rows.Close()

var dbNames []string
var dbName string

for rows.Next() {
err := rows.Scan(&dbName)
if err != nil {
return nil, err
}
dbNames = append(dbNames, dbName)
}
return dbNames, err
}

func ListText(
host string,
port int,
user string,
password string,
) {
dbNames, err := List(host, port, user, password)
if err != nil {
panic(err)
}
for _, dbName := range dbNames {
fmt.Println(dbName)
}
}

0 comments on commit 66a5473

Please sign in to comment.