-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathpgopher.go
97 lines (91 loc) · 1.83 KB
/
pgopher.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main
import (
"database/sql"
"errors"
"fmt"
"log"
"os"
"github.com/codegangsta/cli"
_ "github.com/lib/pq"
)
var VERSION = "0.1.0"
func main() {
app := cli.NewApp()
app.Name = "pgopher"
app.Version = VERSION
app.Author = "Long Nguyen"
app.Email = "[email protected]"
app.Usage = "Running PostgresSQL Queries"
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "host",
Value: "",
Usage: "hostname",
},
cli.StringFlag{
Name: "port",
Value: "",
Usage: "port",
},
cli.StringFlag{
Name: "username, u",
Value: "",
Usage: "username",
},
cli.StringFlag{
Name: "password, p",
Value: "",
Usage: "password",
},
cli.StringFlag{
Name: "uri",
Value: "",
Usage: "uri",
},
cli.StringFlag{
Name: "query, q",
Value: "",
Usage: "query to be ran",
},
cli.StringFlag{
Name: "database, d",
Value: "",
Usage: "database",
},
}
app.Action = func(c *cli.Context) {
uri, err := getUri(c)
if err != nil {
log.Fatal(err)
}
query := c.String("query")
db, err := sql.Open("postgres", uri+"?sslmode=disable")
if err != nil {
log.Fatal(err)
}
_, err = db.Query(query)
if err != nil {
log.Fatal(err)
}
fmt.Println("Query: " + query + " completed")
}
app.Run(os.Args)
}
func getUri(c *cli.Context) (string, error) {
uri := ""
username := c.String("username")
password := c.String("password")
host := c.String("host")
port := c.String("port")
database := c.String("database")
if username != "" && password != "" &&
host != "" && port != "" {
uri = "postgres://" + username + ":" + password +
"@" + host + ":" + port + "/" + database
} else if c.String("uri") != "" {
uri = c.String("uri")
} else {
return "", errors.New("Error creating uri, please enter username, password, host, port, database or uri")
}
return uri, nil
}