新增: timer 配置支持 PostgreSQL 数据库

This commit is contained in:
2025-05-12 00:30:33 +08:00
parent 1fae74191e
commit 978a268f93
3 changed files with 31 additions and 7 deletions

View File

@@ -17,3 +17,5 @@ file=zhub.log
# db.user=root # db.user=root
# db.password=123456 # db.password=123456
# db.database=zhub # db.database=zhub
# db.schema=public
# db.type=postgres # mysql|postgres

View File

@@ -30,6 +30,8 @@ type Config struct {
User string User string
Password string Password string
Database string Database string
Schema string
Type string
} }
} }
Auth map[string]string Auth map[string]string

View File

@@ -4,6 +4,7 @@ import (
"database/sql" "database/sql"
"fmt" "fmt"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
_ "github.com/lib/pq" // 导入 pq 驱动
"github.com/robfig/cron" "github.com/robfig/cron"
"log" "log"
"regexp" "regexp"
@@ -162,19 +163,38 @@ func (s *ZBus) ReloadTimer() {
return return
} }
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8", var db *sql.DB
Conf.Ztimer.Db.User, var err error
Conf.Ztimer.Db.Password,
Conf.Ztimer.Db.Addr, if Conf.Ztimer.Db.Type == "postgres" {
Conf.Ztimer.Db.Database, hostPort := strings.Split(Conf.Ztimer.Db.Addr, ":")
)) db, err = sql.Open("postgres", fmt.Sprintf("user=%s password=%s host=%s port=%s dbname=%s sslmode=disable",
Conf.Ztimer.Db.User,
Conf.Ztimer.Db.Password,
hostPort[0],
hostPort[1],
Conf.Ztimer.Db.Database,
))
// 设置当前会话的 schema
_, err = db.Exec("SET search_path TO " + Conf.Ztimer.Db.Schema)
if err != nil {
log.Println(err)
}
} else {
db, err = sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8",
Conf.Ztimer.Db.User,
Conf.Ztimer.Db.Password,
Conf.Ztimer.Db.Addr,
Conf.Ztimer.Db.Database,
))
}
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
defer db.Close() defer db.Close()
rows, err := db.Query("SELECT t.`name`, IF(t.`status`=10,t.`expr`,''), IF(t.`single`=1,'a','x') 'single' FROM tasktimer t ORDER BY t.`timerid`") rows, err := db.Query("SELECT t.`name`, IF(t.`status`=10,t.`expr`,''), IF(t.`single`=1,'a','x') single FROM tasktimer t ORDER BY t.`timerid`")
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return