用于golang database/sql 的PostgreSQL驱动
- Scan() 时允许传入指针,完美对应数据库中的
null
- 所有查询全部自动
prepare
并缓存。 - 支持
pg://
前缀的URI - 支持
Listen
式的异步消息订阅
go get github.com/blusewang/pg/v2
sql.Register("pg", 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 table_name 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
}
if err := l.Listen("channel_name")); err != nil {
return
}
go func() {
time.Sleep(time.Minute)
_ = l.Terminate()
}()
for {
pid, channel, message, err := l.GetNotification()
if err == io.EOF {
return err
} else if err != nil {
return err
}
log.Println(pid, channel, message)
}
更多的细节及使用示例,参见: https://pkg.go.dev/github.com/blusewang/pg/v2.
- 配置上需将
sql.SetMaxIdleConns(x)
、sql.SetMaxOpenConns(x)
两处的x设置为相同的值,才能让缓存实现价值。
- 本驱动是为Web服务而设计
状态 | 功能 | 备注 |
---|---|---|
启动 | 支持:无密码、明文密码、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
。