├── Changelog.md ├── README.md └── pgopher.go /Changelog.md: -------------------------------------------------------------------------------- 1 | ## 0.1.0 2 | 3 | Initial Release 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # pgopher 2 | 3 | Runs single postgres command in static binary. 4 | 5 | Sometimes you just need to run postgres command and don't want to install postgres on machine. 6 | 7 | ``` 8 | pgopher --host "localhost" --port 5432 -u lnguyen -p lnguyen --database lnguyen-q "create table foo ()" 9 | # Or 10 | pgopher --uri "postgres://lnguyen:lnguyen@localhost:5432/lnguyen" -q "create table foo ()" 11 | ``` 12 | 13 | ## Installation 14 | 15 | ``` 16 | go get github.com/longnguyen11288/pgopher 17 | ``` 18 | 19 | ## TODO 20 | 21 | Add support for running select query and printing them out 22 | -------------------------------------------------------------------------------- /pgopher.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "database/sql" 5 | "errors" 6 | "fmt" 7 | "log" 8 | "os" 9 | 10 | "github.com/codegangsta/cli" 11 | _ "github.com/lib/pq" 12 | ) 13 | 14 | var VERSION = "0.1.0" 15 | 16 | func main() { 17 | app := cli.NewApp() 18 | app.Name = "pgopher" 19 | app.Version = VERSION 20 | app.Author = "Long Nguyen" 21 | app.Email = "long.nguyen11288@gmail.com" 22 | app.Usage = "Running PostgresSQL Queries" 23 | app.Flags = []cli.Flag{ 24 | cli.StringFlag{ 25 | Name: "host", 26 | Value: "", 27 | Usage: "hostname", 28 | }, 29 | cli.StringFlag{ 30 | Name: "port", 31 | Value: "", 32 | Usage: "port", 33 | }, 34 | cli.StringFlag{ 35 | Name: "username, u", 36 | Value: "", 37 | Usage: "username", 38 | }, 39 | cli.StringFlag{ 40 | Name: "password, p", 41 | Value: "", 42 | Usage: "password", 43 | }, 44 | cli.StringFlag{ 45 | Name: "uri", 46 | Value: "", 47 | Usage: "uri", 48 | }, 49 | cli.StringFlag{ 50 | Name: "query, q", 51 | Value: "", 52 | Usage: "query to be ran", 53 | }, 54 | cli.StringFlag{ 55 | Name: "database, d", 56 | Value: "", 57 | Usage: "database", 58 | }, 59 | } 60 | app.Action = func(c *cli.Context) { 61 | uri, err := getUri(c) 62 | if err != nil { 63 | log.Fatal(err) 64 | } 65 | query := c.String("query") 66 | db, err := sql.Open("postgres", uri+"?sslmode=disable") 67 | if err != nil { 68 | log.Fatal(err) 69 | } 70 | _, err = db.Query(query) 71 | if err != nil { 72 | log.Fatal(err) 73 | } 74 | fmt.Println("Query: " + query + " completed") 75 | } 76 | 77 | app.Run(os.Args) 78 | } 79 | 80 | func getUri(c *cli.Context) (string, error) { 81 | uri := "" 82 | username := c.String("username") 83 | password := c.String("password") 84 | host := c.String("host") 85 | port := c.String("port") 86 | database := c.String("database") 87 | if username != "" && password != "" && 88 | host != "" && port != "" { 89 | uri = "postgres://" + username + ":" + password + 90 | "@" + host + ":" + port + "/" + database 91 | } else if c.String("uri") != "" { 92 | uri = c.String("uri") 93 | } else { 94 | return "", errors.New("Error creating uri, please enter username, password, host, port, database or uri") 95 | } 96 | return uri, nil 97 | } 98 | --------------------------------------------------------------------------------