package main import ( "github.com/lib/pq" "database/sql" "fmt" "log" "time" ) const connInfo = "host=/var/run/postgresql sslmode=disable" func listener(i int) { l := pq.NewListener(connInfo, time.Second, time.Second, nil) err := l.Listen(fmt.Sprintf("channel%d", i)) if err != nil { log.Fatal(err) } for { <-l.Notify } } func notifier(dbh *sql.DB, i int) { for { _, err := dbh.Exec(fmt.Sprintf("NOTIFY channel%d", i)) if err != nil { log.Fatal(err) } time.Sleep(750 * time.Millisecond) } } func main() { openDb := func() *sql.DB { db, _ := sql.Open("postgres", connInfo) err := db.Ping() if err != nil { log.Fatal(err) } db.SetMaxIdleConns(2) db.SetMaxOpenConns(2) return db } for i := 0; i < 50; i++ { go listener(i) go notifier(openDb(), i) time.Sleep(20 * time.Millisecond) } select{} }