pglisten/_sample.go

73 lines
1.2 KiB
Go

package _sample
import (
"flag"
"fmt"
"git.fabbe.io/pglisten.git"
"os/exec"
)
var (
host string
dbname string
password string
user string
channel string
err error
)
func parseflags() {
flag.StringVar(&host, "host", "localhost", "host or IP")
flag.StringVar(&dbname, "dbname", "postgres", "")
flag.StringVar(&password, "password", "supersecret", "")
flag.StringVar(&user, "user", "postgres", "")
flag.StringVar(&channel, "channel", "events", "")
flag.Parse()
}
func handleevent(m pglisten.Message) bool {
if m.Table != "" && m.Op != "" {
println(fmt.Sprintf("%s on table %s", m.Op, m.Table))
}
switch m.Table {
case "sometable":
for k, v := range m.Payload {
if k == "id" {
if str, ok := v.(string); ok {
go func() {
cmd := exec.Command("touch", "/tmp/"+str)
cmd.Run()
}()
}
}
}
default:
fmt.Println(m.Payload)
}
return true
}
func main() {
parseflags()
conninfo := fmt.Sprintf(
"host=%s dbname=%s user=%s password=%s sslmode=disable",
host, dbname, user, password)
db, err = sql.Open("postgres", conninfo)
if err != nil {
panic(err)
}
err = db.Ping()
if err != nil {
panic(err)
}
pglisten.On(conninfo, channel, handleevent)
}