From 978a268f9399a7c6c6e1927429d5aa768a031cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Mon, 12 May 2025 00:30:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20timer=20=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=94=AF=E6=8C=81=20PostgreSQL=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.ini | 2 ++ internal/config/config.go | 2 ++ internal/zbus/ztimer.go | 34 +++++++++++++++++++++++++++------- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/app.ini b/app.ini index e5417bb..c578968 100644 --- a/app.ini +++ b/app.ini @@ -17,3 +17,5 @@ file=zhub.log # db.user=root # db.password=123456 # db.database=zhub +# db.schema=public +# db.type=postgres # mysql|postgres diff --git a/internal/config/config.go b/internal/config/config.go index d88fc9c..1fd469b 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -30,6 +30,8 @@ type Config struct { User string Password string Database string + Schema string + Type string } } Auth map[string]string diff --git a/internal/zbus/ztimer.go b/internal/zbus/ztimer.go index 43ff5d8..b8add2a 100644 --- a/internal/zbus/ztimer.go +++ b/internal/zbus/ztimer.go @@ -4,6 +4,7 @@ import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" + _ "github.com/lib/pq" // 导入 pq 驱动 "github.com/robfig/cron" "log" "regexp" @@ -162,19 +163,38 @@ func (s *ZBus) ReloadTimer() { return } - 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, - )) + var db *sql.DB + var err error + + if Conf.Ztimer.Db.Type == "postgres" { + 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 { log.Println(err) return } 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 { log.Println(err) return