pg
用于golang database/sql 的PostgreSQL驱动
Go Version Support
PostgreSQL Version Support
安装
go get github.com/blusewang/pg/v2
使用
通用查询
sql.Register("pq", pg.Driver{})
db, err := sql.Open("pg", "pg://user:password@dbhost.yourdomain.com/database_name?application_name=app_name&sslmode=verify-full")
if err != nil {
return err
}
defer db.Close()
rows, err := db.Query("select * from bluse where id>$1", 0)
if err != nil {
return err
}
...
异步订阅
l, err := pg.NewListener("pg://user:password@dbhost.yourdomain.com/database_name?application_name=app_name&sslmode=verify-full")
if err != nil {
return
}
t.Log(l.Listen("channel_name"))
go func() {
time.Sleep(time.Minute)
_ = l.Terminate()
}()
for {
pid, channel, message, err := l.GetNotification()
if err == io.EOF {
t.Fatal(err)
} else if err != nil {
t.Fatal(err)
}
log.Println(pid, channel, message)
}
文档
更多的细节及使用示例,参见: https://pkg.go.dev/github.com/blusewang/pg/v2.
特性
- Scan() 时允许传入指针,完美对应数据库中的
null
- 所有查询全部自动
prepare
并缓存。
- 支持
pg://
前缀的URI
- 支持
Listen
式的异步消息订阅
配置要求
- 配置上需将
sql.SetMaxIdleConns(x)
、sql.SetMaxOpenConns(x)
两处的x设置为相同的值,才能让缓存实现价值。
协议实现
状态 |
功能 |
备注 |
|
启动 |
支持:无密码、明文密码、md5、SCRAM-SHA-256 |
|
简单查询 |
必备 |
|
扩展查询 |
必备 |
|
取消正在处理的请求 |
必备 |
|
终止 |
必备 |
|
SSL会话加密 |
远程安全 |
|
异步 |
listen/notify |
暂不支持SCRAM-SHA-256-PLUS
。当pg_hba.conf
使用:
hostssl all all 0.0.0.0/0 scram-sha-256 clientcert=verify-full
时,Server会发类型为SCRAM-SHA-256-PLUS
类型的请求。此时客户端将自动降级至SCRAM-SHA-256
。
License