# README
pg
用于golang database/sql 的PostgreSQL驱动
Go Version Support
PostgreSQL Version Support
特性
- 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:[email protected]/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:[email protected]/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
。