Difference between revisions of "Embedded postgresql using golang"

From UVOO Tech Wiki
Jump to navigation Jump to search
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
.env
+
nano .env
 
```
 
```
 
export PGDATABASE=demo
 
export PGDATABASE=demo
Line 8: Line 8:
 
```
 
```
  
get package
+
Source
 +
```
 +
. .env
 +
```
 +
 
 +
Get package
 
```
 
```
 
go get -u github.com/fergusstrange/embedded-postgres
 
go get -u github.com/fergusstrange/embedded-postgres
 
```
 
```
  
runpg.go
+
nano runpg.go
 
```
 
```
 
package main
 
package main
 +
 
/*
 
/*
 
https://pkg.go.dev/github.com/fergusstrange/embedded-postgres#section-readme
 
https://pkg.go.dev/github.com/fergusstrange/embedded-postgres#section-readme
Line 24: Line 30:
  
 
import (
 
import (
        "bytes"
+
    "bytes"
        "fmt"
+
    "fmt"
        "time"
+
    "os"
 +
    "strconv"
 +
    "time"
  
        "github.com/fergusstrange/embedded-postgres"
+
    "github.com/drael/GOnetstat"
 +
    "github.com/fergusstrange/embedded-postgres"
 +
    // "sync"
 
)
 
)
 +
 +
// var wg sync.WaitGroup
  
 
func main() {
 
func main() {
        runseconds := 60
+
    port := 9999
 +
    // var port64 int64
 +
    // port64 = int64(port)
 +
    // killPort(port64)
 +
    runseconds := 60
 +
    var port32 uint32
 +
    port32 = uint32(port)
 +
    // Version("14.2.0").
 +
    // Version("13.6.0").
 +
    // Version("12.10.0").
 +
    logger := &bytes.Buffer{}
 +
    conf := embeddedpostgres.DefaultConfig().
 +
        Username("demo").
 +
        Password("demo").
 +
        Database("demo").
 
         // Version("14.2.0").
 
         // Version("14.2.0").
         // Version("13.6.0").
+
         Version("12.10.0").
        // Version("12.10.0").
+
         RuntimePath("./runtime").
         logger := &bytes.Buffer{}
+
        BinariesPath("./bin").
        conf := embeddedpostgres.DefaultConfig().
+
        DataPath("./data").
                Username("demo").
+
        BinaryRepositoryURL("https://repo1.maven.org/maven2").
                Password("demo").
+
        Port(port32).
                Database("demo").
+
        StartTimeout(15 * time.Second).
                Version("14.2.0").
+
        Logger(logger)
                RuntimePath("./pgdata").
+
 
                BinaryRepositoryURL("https://repo1.maven.org/maven2").
+
    postgres := embeddedpostgres.NewDatabase(conf)
                Port(15432).
+
    err := postgres.Start()
                StartTimeout(15 * time.Second).
+
    if err != nil {
                Logger(logger)
+
        fmt.Println(err)
 +
        os.Exit(1)
 +
    }
 +
 
 +
    fmt.Printf("Running postgres server for %d seconds.\n", runseconds)
 +
    time.Sleep(time.Duration(runseconds) * time.Second)
  
        postgres := embeddedpostgres.NewDatabase(conf)
+
    err = postgres.Stop()
        err := postgres.Start()
+
    if err != nil {
                if err != nil {
+
        fmt.Println(err)
                        fmt.Println(err)
+
    }
                }
+
}
  
        fmt.Printf("Running postgres server for %d seconds.", runseconds)
 
        time.Sleep(time.Duration(runseconds) * time.Second)
 
  
         err = postgres.Stop()
+
func killPort(port int64) {
                 if err != nil {
+
    // defer wg.Done()
                        fmt.Println(err)
+
    d := GOnetstat.Tcp()
                }
+
    for _, p := range d {
 +
         if p.State == "LISTEN" && p.Port == port {
 +
            fmt.Printf("Killing port, pid, name %v %v %v\n", port, p.Pid, p.Name)
 +
            pid, err := strconv.Atoi(p.Pid)
 +
            if err != nil {
 +
                 panic(err.Error())
 +
            }
 +
            process, err := os.FindProcess(pid)
 +
            if err != nil {
 +
                panic(err.Error())
 +
            }
 +
            process.Signal(os.Interrupt)
 +
            fmt.Printf("Waiting 10 seconds for port to close.\n")
 +
            time.Sleep(time.Duration(10) * time.Second)
 +
        }
 +
    }
 
}
 
}
 
```
 
```

Latest revision as of 03:21, 12 March 2022

nano .env

export PGDATABASE=demo
export PGHOST=127.0.0.1
export PGPASSWORD=demo
export PGPORT=15432
export PGUSER=demo

Source

. .env

Get package

go get -u github.com/fergusstrange/embedded-postgres

nano runpg.go

package main

/*
https://pkg.go.dev/github.com/fergusstrange/embedded-postgres#section-readme
https://github.com/fergusstrange/embedded-postgres
https://github.com/zonkyio/embedded-postgres
https://mvnrepository.com/artifact/io.zonky.test.postgres/embedded-postgres-binaries-bom
*/

import (
    "bytes"
    "fmt"
    "os"
    "strconv"
    "time"

    "github.com/drael/GOnetstat"
    "github.com/fergusstrange/embedded-postgres"
    // "sync"
)

// var wg sync.WaitGroup

func main() {
    port := 9999
    // var port64 int64
    // port64 = int64(port)
    // killPort(port64)
    runseconds := 60
    var port32 uint32
    port32 = uint32(port)
    // Version("14.2.0").
    // Version("13.6.0").
    // Version("12.10.0").
    logger := &bytes.Buffer{}
    conf := embeddedpostgres.DefaultConfig().
        Username("demo").
        Password("demo").
        Database("demo").
        // Version("14.2.0").
        Version("12.10.0").
        RuntimePath("./runtime").
        BinariesPath("./bin").
        DataPath("./data").
        BinaryRepositoryURL("https://repo1.maven.org/maven2").
        Port(port32).
        StartTimeout(15 * time.Second).
        Logger(logger)

    postgres := embeddedpostgres.NewDatabase(conf)
    err := postgres.Start()
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    fmt.Printf("Running postgres server for %d seconds.\n", runseconds)
    time.Sleep(time.Duration(runseconds) * time.Second)

    err = postgres.Stop()
    if err != nil {
        fmt.Println(err)
    }
}


func killPort(port int64) {
    // defer wg.Done()
    d := GOnetstat.Tcp()
    for _, p := range d {
        if p.State == "LISTEN" && p.Port == port {
            fmt.Printf("Killing port, pid, name %v %v %v\n", port, p.Pid, p.Name)
            pid, err := strconv.Atoi(p.Pid)
            if err != nil {
                panic(err.Error())
            }
            process, err := os.FindProcess(pid)
            if err != nil {
                panic(err.Error())
            }
            process.Signal(os.Interrupt)
            fmt.Printf("Waiting 10 seconds for port to close.\n")
            time.Sleep(time.Duration(10) * time.Second)
        }
    }
}

Build

go build runpg.go

Run

./runpg