Skip to content

Instantly share code, notes, and snippets.

@kingluo
Last active August 29, 2015 14:25
Show Gist options
  • Save kingluo/5018a285a523124f5381 to your computer and use it in GitHub Desktop.
Save kingluo/5018a285a523124f5381 to your computer and use it in GitHub Desktop.
go libpq
--- testpq.go 2015-07-17 16:18:53.616212373 +0800
+++ testpq2.go 2015-07-17 16:03:03.420162955 +0800
@@ -8,6 +8,9 @@
_ "github.com/lib/pq"
)
+//#include <unistd.h>
+import "C"
+
func query(db *sql.DB, tstart time.Time, tend time.Time) {
log.Println("query from", tstart, "to", tend)
rows, err := db.Query("select * from users where ts <= $2 and ts > $1", tstart, tend)
@@ -43,8 +46,13 @@
cur := time.Now().Truncate(time.Minute)
tstart, tend := cur.Add(time.Minute*-1), cur
+ start := true
for {
query(db, tstart, tend)
+ if start {
+ start = false
+ C.sleep(60 * 3)
+ }
delta := time.Now().Sub(tend).Minutes()
tstart, tend = tend, tend.Add(time.Minute*1)
if delta >= 1 {
2015/07/17 15:45:41 testpq.go:15: query from 2015-07-17 15:44:00 +0800 CST to 2015-07-17 15:45:00 +0800 CST
2015/07/17 15:48:41 testpq.go:15: query from 2015-07-17 15:45:00 +0800 CST to 2015-07-17 15:46:00 +0800 CST
2015/07/17 15:48:41 testpq.go:15: query from 2015-07-17 15:46:00 +0800 CST to 2015-07-17 15:47:00 +0800 CST
2015/07/17 15:48:41 testpq.go:15: query from 2015-07-17 15:47:00 +0800 CST to 2015-07-17 15:48:00 +0800 CST
2015/07/17 15:49:41 testpq.go:15: query from 2015-07-17 15:48:00 +0800 CST to 2015-07-17 15:49:00 +0800 CST
package main
import (
"database/sql"
"log"
"time"
_ "github.com/lib/pq"
)
func query(db *sql.DB, tstart time.Time, tend time.Time) {
log.Println("query from", tstart, "to", tend)
rows, err := db.Query("select * from users where ts <= $2 and ts > $1", tstart, tend)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
var id int
var name string
var ts time.Time
for rows.Next() {
err := rows.Scan(&id, &name, &ts)
if err != nil {
log.Fatal(err)
}
log.Println(id, name, ts)
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
}
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
db, err := sql.Open("postgres", "postgres://test:test@127.0.0.1:5432/test?sslmode=require")
if err != nil {
log.Fatal(err)
}
defer db.Close()
cur := time.Now().Truncate(time.Minute)
tstart, tend := cur.Add(time.Minute*-1), cur
for {
query(db, tstart, tend)
delta := time.Now().Sub(tend).Minutes()
tstart, tend = tend, tend.Add(time.Minute*1)
if delta >= 1 {
continue
}
time.Sleep(time.Minute * 1)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment