Skip to content

Commit e6998f8

Browse files
chang196700gsw945
authored andcommitted
Add postgresql support (mindoc-org#792)
* use false for bool type Signed-off-by: ChangFeng <[email protected]> * use `limit ? offset ?` instead limit ?,? for database compatibility Signed-off-by: ChangFeng <[email protected]> * add postgresql support Signed-off-by: ChangFeng <[email protected]> * add postgres options and descriptions Signed-off-by: ChangFeng <[email protected]> --------- close mindoc-org#791 Signed-off-by: ChangFeng <[email protected]> Co-authored-by: 玖亖伍 <[email protected]>
1 parent 29de9fb commit e6998f8

9 files changed

+61
-30
lines changed

commands/command.go

+25
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/beego/beego/v2/server/web"
2727
"github.com/beego/i18n"
2828
"github.com/howeyc/fsnotify"
29+
_ "github.com/lib/pq"
2930
"github.com/lifei6671/gocaptcha"
3031
"github.com/mindoc-org/mindoc/cache"
3132
"github.com/mindoc-org/mindoc/conf"
@@ -84,6 +85,30 @@ func RegisterDataBase() {
8485
if err != nil {
8586
logs.Error("注册默认数据库失败->", err)
8687
}
88+
} else if strings.EqualFold(dbadapter, "postgres") {
89+
host, _ := web.AppConfig.String("db_host")
90+
database, _ := web.AppConfig.String("db_database")
91+
username, _ := web.AppConfig.String("db_username")
92+
password, _ := web.AppConfig.String("db_password")
93+
sslmode, _ := web.AppConfig.String("db_sslmode")
94+
95+
timezone, _ := web.AppConfig.String("timezone")
96+
location, err := time.LoadLocation(timezone)
97+
if err == nil {
98+
orm.DefaultTimeLoc = location
99+
} else {
100+
logs.Error("加载时区配置信息失败,请检查是否存在 ZONEINFO 环境变量->", err)
101+
}
102+
103+
port, _ := web.AppConfig.String("db_port")
104+
105+
dataSource := fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=%s", username, password, host, port, database, sslmode)
106+
107+
if err := orm.RegisterDataBase("default", "postgres", dataSource); err != nil {
108+
logs.Error("注册默认数据库失败->", err)
109+
os.Exit(1)
110+
}
111+
87112
} else {
88113
logs.Error("不支持的数据库类型.")
89114
os.Exit(1)

conf/app.conf.example

+7-1
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,19 @@ timezone = Asia/Shanghai
5353

5454

5555
####################MySQL 数据库配置###########################
56-
#支持MySQL和sqlite3两种数据库,如果是sqlite3 则 db_database 标识数据库的物理目录
56+
#支持MySQL,sqlite3,postgres三种数据库,如果是sqlite3 则 db_database 标识数据库的物理目录
5757
db_adapter="${MINDOC_DB_ADAPTER||sqlite3}"
5858
db_host="${MINDOC_DB_HOST||127.0.0.1}"
5959
db_port="${MINDOC_DB_PORT||3306}"
6060
db_database="${MINDOC_DB_DATABASE||./database/mindoc.db}"
6161
db_username="${MINDOC_DB_USERNAME||root}"
6262
db_password="${MINDOC_DB_PASSWORD||123456}"
63+
#是否使用SSL,支持posgres,可选的值有:
64+
#disable - No SSL
65+
#require - Always SSL (skip verification)
66+
#verify-ca - Always SSL (verify that the certificate presented by the server was signed by a trusted CA)
67+
#verify-full - Always SSL (verify that the certification presented by the server was signed by a trusted CA and the server host name matches the one in the certificate)
68+
db_sslmode="${MINDOC_DB_SSLMODE||disable}"
6369

6470
####################sqlite3 数据库配置###########################
6571
#db_adapter=sqlite3

models/BookModel.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ FROM md_books AS book
393393
// " LEFT JOIN " + relationship.TableNameWithPrefix() + " AS rel ON book.book_id=rel.book_id AND rel.member_id = ?" +
394394
// " LEFT JOIN " + relationship.TableNameWithPrefix() + " AS rel1 ON book.book_id=rel1.book_id AND rel1.role_id=0" +
395395
// " LEFT JOIN " + NewMember().TableNameWithPrefix() + " AS m ON rel1.member_id=m.member_id " +
396-
// " WHERE rel.relationship_id > 0 ORDER BY book.order_index DESC,book.book_id DESC LIMIT " + fmt.Sprintf("%d,%d", offset, pageSize)
396+
// " WHERE rel.relationship_id > 0 ORDER BY book.order_index DESC,book.book_id DESC LIMIT " + fmt.Sprintf("%d,%d", pageSize, offset)
397397

398398
sql2 := `SELECT
399399
book.*,
@@ -410,9 +410,9 @@ FROM md_books AS book
410410
LEFT JOIN md_relationship AS rel1 ON book.book_id = rel1.book_id AND rel1.role_id = 0
411411
LEFT JOIN md_members AS m ON rel1.member_id = m.member_id
412412
WHERE rel.role_id >= 0 or team.role_id >= 0
413-
ORDER BY book.order_index, book.book_id DESC limit ?,?`
413+
ORDER BY book.order_index, book.book_id DESC limit ? offset ?`
414414

415-
_, err = o.Raw(sql2, memberId, memberId, offset, pageSize).QueryRows(&books)
415+
_, err = o.Raw(sql2, memberId, memberId, pageSize, offset).QueryRows(&books)
416416
if err != nil {
417417
logs.Error("分页查询项目列表 => ", err)
418418
return
@@ -550,9 +550,9 @@ WHERE book.privately_owned = 0 or rel.role_id >=0 or team.role_id >=0`
550550
as t group by book_id) as team on team.book_id=book.book_id
551551
LEFT JOIN md_relationship AS rel1 ON rel1.book_id = book.book_id AND rel1.role_id = 0
552552
LEFT JOIN md_members AS mdmb ON rel1.member_id = mdmb.member_id
553-
WHERE book.privately_owned = 0 or rel.role_id >=0 or team.role_id >=0 ORDER BY order_index desc,book.book_id DESC LIMIT ?,?`
553+
WHERE book.privately_owned = 0 or rel.role_id >=0 or team.role_id >=0 ORDER BY order_index desc,book.book_id DESC limit ? offset ?`
554554

555-
_, err = o.Raw(sql2, memberId, memberId, offset, pageSize).QueryRows(&books)
555+
_, err = o.Raw(sql2, memberId, memberId, pageSize, offset).QueryRows(&books)
556556

557557
} else {
558558
count, err1 := o.QueryTable(book.TableNameWithPrefix()).Filter("privately_owned", 0).Count()
@@ -566,9 +566,9 @@ WHERE book.privately_owned = 0 or rel.role_id >=0 or team.role_id >=0 ORDER BY o
566566
sql := `SELECT book.*,rel.*,mdmb.account AS create_name,mdmb.real_name FROM md_books AS book
567567
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.role_id = 0
568568
LEFT JOIN md_members AS mdmb ON rel.member_id = mdmb.member_id
569-
WHERE book.privately_owned = 0 ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,?`
569+
WHERE book.privately_owned = 0 ORDER BY order_index DESC ,book.book_id DESC limit ? offset ?`
570570

571-
_, err = o.Raw(sql, offset, pageSize).QueryRows(&books)
571+
_, err = o.Raw(sql, pageSize, offset).QueryRows(&books)
572572

573573
}
574574
return
@@ -604,9 +604,9 @@ WHERE (relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id >
604604
LEFT JOIN md_relationship AS rel1 ON rel1.book_id = book.book_id AND rel1.role_id = 0
605605
LEFT JOIN md_members AS mdmb ON rel1.member_id = mdmb.member_id
606606
WHERE (rel.relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id > 0)
607-
AND book.label LIKE ? ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,?`
607+
AND book.label LIKE ? ORDER BY order_index DESC ,book.book_id DESC limit ? offset ?`
608608

609-
_, err = o.Raw(sql2, memberId, memberId, keyword, offset, pageSize).QueryRows(&books)
609+
_, err = o.Raw(sql2, memberId, memberId, keyword, pageSize, offset).QueryRows(&books)
610610

611611
return
612612

@@ -622,9 +622,9 @@ WHERE (relationship_id > 0 OR book.privately_owned = 0 or team.team_member_id >
622622
sql := `SELECT book.*,rel.*,mdmb.account AS create_name FROM md_books AS book
623623
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.role_id = 0
624624
LEFT JOIN md_members AS mdmb ON rel.member_id = mdmb.member_id
625-
WHERE book.privately_owned = 0 AND book.label LIKE ? ORDER BY order_index DESC ,book.book_id DESC LIMIT ?,?`
625+
WHERE book.privately_owned = 0 AND book.label LIKE ? ORDER BY order_index DESC ,book.book_id DESC limit ? offset ?`
626626

627-
_, err = o.Raw(sql, keyword, offset, pageSize).QueryRows(&books)
627+
_, err = o.Raw(sql, keyword, pageSize, offset).QueryRows(&books)
628628

629629
return
630630

models/BookResult.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,11 @@ func (m *BookResult) FindToPager(pageIndex, pageSize int) (books []*BookResult,
176176
FROM md_books AS book
177177
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.role_id = 0
178178
LEFT JOIN md_members AS m ON rel.member_id = m.member_id
179-
ORDER BY book.order_index DESC ,book.book_id DESC LIMIT ?,?`
179+
ORDER BY book.order_index DESC ,book.book_id DESC limit ? offset ?`
180180

181181
offset := (pageIndex - 1) * pageSize
182182

183-
_, err = o.Raw(sql, offset, pageSize).QueryRows(&books)
183+
_, err = o.Raw(sql, pageSize, offset).QueryRows(&books)
184184

185185
return
186186
}

models/DocumentHistory.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,9 @@ func (m *DocumentHistory) FindToPager(docId, pageIndex, pageSize int) (docs []*D
165165
FROM md_document_history AS history
166166
LEFT JOIN md_members AS m1 ON history.member_id = m1.member_id
167167
LEFT JOIN md_members AS m2 ON history.modify_at = m2.member_id
168-
WHERE history.document_id = ? ORDER BY history.history_id DESC LIMIT ?,?;`
168+
WHERE history.document_id = ? ORDER BY history.history_id DESC limit ? offset ?;`
169169

170-
_, err = o.Raw(sql, docId, offset, pageSize).QueryRows(&docs)
170+
_, err = o.Raw(sql, docId, pageSize, offset).QueryRows(&docs)
171171

172172
if err != nil {
173173
return

models/DocumentSearchResult.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ WHERE book.privately_owned = 0 AND (book.book_name LIKE ? OR book.description LI
9696
WHERE blog.blog_status = 'public' AND (blog.blog_release LIKE ? OR blog.blog_title LIKE ?)
9797
) AS union_table
9898
ORDER BY create_time DESC
99-
LIMIT ?, ?;`
99+
LIMIT ? OFFSET ?;`
100100

101101
err = o.Raw(sql1, keyword, keyword).QueryRow(&totalCount)
102102
if err != nil {
@@ -128,7 +128,7 @@ WHERE book.privately_owned = 0 AND (book.book_name LIKE ? OR book.description LI
128128

129129
totalCount += c
130130

131-
_, err = o.Raw(sql2, keyword, keyword, keyword, keyword, keyword, keyword, offset, pageSize).QueryRows(&searchResult)
131+
_, err = o.Raw(sql2, keyword, keyword, keyword, keyword, keyword, keyword, pageSize, offset).QueryRows(&searchResult)
132132
if err != nil {
133133
logs.Error("查询搜索结果失败 -> ", err)
134134
return
@@ -224,7 +224,7 @@ FROM (
224224
(blog.blog_release LIKE ? OR blog.blog_title LIKE ?)
225225
) AS union_table
226226
ORDER BY create_time DESC
227-
LIMIT ?, ?;`
227+
LIMIT ? OFFSET ?;`
228228

229229
err = o.Raw(sql1, memberId, memberId, keyword, keyword).QueryRow(&totalCount)
230230
if err != nil {
@@ -262,7 +262,7 @@ WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0 or team.team_member_
262262

263263
totalCount += c
264264

265-
_, err = o.Raw(sql2, memberId, memberId, keyword, keyword, memberId, memberId, keyword, keyword, memberId, keyword, keyword, offset, pageSize).QueryRows(&searchResult)
265+
_, err = o.Raw(sql2, memberId, memberId, keyword, keyword, memberId, memberId, keyword, keyword, memberId, keyword, keyword, pageSize, offset).QueryRows(&searchResult)
266266
if err != nil {
267267
return
268268
}

models/Itemsets.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,9 @@ as t group by book_id) as team
246246
LEFT JOIN md_relationship AS rel1 ON rel1.book_id = book.book_id AND rel1.role_id = 0
247247
LEFT JOIN md_members AS mdmb ON rel1.member_id = mdmb.member_id
248248
WHERE book.item_id = ? AND (book.privately_owned = 0 or rel.role_id >= 0 or team.role_id >= 0)
249-
ORDER BY order_index desc,book.book_id DESC LIMIT ?,?`
249+
ORDER BY order_index desc,book.book_id DESC limit ? offset ?`
250250

251-
_, err = o.Raw(sql2, memberId, memberId, item.ItemId, offset, pageSize).QueryRows(&books)
251+
_, err = o.Raw(sql2, memberId, memberId, item.ItemId, pageSize, offset).QueryRows(&books)
252252

253253
return
254254

@@ -264,9 +264,9 @@ as t group by book_id) as team
264264
sql := `SELECT book.*,rel.*,mdmb.account AS create_name FROM md_books AS book
265265
LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.role_id = 0
266266
LEFT JOIN md_members AS mdmb ON rel.member_id = mdmb.member_id
267-
WHERE book.item_id = ? AND book.privately_owned = 0 ORDER BY order_index desc,book.book_id DESC LIMIT ?,?`
267+
WHERE book.item_id = ? AND book.privately_owned = 0 ORDER BY order_index desc,book.book_id DESC limit ? offset ?`
268268

269-
_, err = o.Raw(sql, item.ItemId, offset, pageSize).QueryRows(&books)
269+
_, err = o.Raw(sql, item.ItemId, pageSize, offset).QueryRows(&books)
270270

271271
return
272272

models/MemberResult.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func (m *MemberRelationshipResult) FindForUsersByBookId(lang string, bookId, pag
7272

7373
var members []*MemberRelationshipResult
7474

75-
sql1 := "SELECT * FROM md_relationship AS rel LEFT JOIN md_members as mdmb ON rel.member_id = mdmb.member_id WHERE rel.book_id = ? ORDER BY rel.relationship_id DESC LIMIT ?,?"
75+
sql1 := "SELECT * FROM md_relationship AS rel LEFT JOIN md_members as mdmb ON rel.member_id = mdmb.member_id WHERE rel.book_id = ? ORDER BY rel.relationship_id DESC limit ? offset ?"
7676

7777
sql2 := "SELECT count(*) AS total_count FROM md_relationship AS rel LEFT JOIN md_members as mdmb ON rel.member_id = mdmb.member_id WHERE rel.book_id = ?"
7878

@@ -86,7 +86,7 @@ func (m *MemberRelationshipResult) FindForUsersByBookId(lang string, bookId, pag
8686

8787
offset := (pageIndex - 1) * pageSize
8888

89-
_, err = o.Raw(sql1, bookId, offset, pageSize).QueryRows(&members)
89+
_, err = o.Raw(sql1, bookId, pageSize, offset).QueryRows(&members)
9090

9191
if err != nil {
9292
return members, 0, err

models/Team.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ import (
1212
//团队.
1313
type Team struct {
1414
TeamId int `orm:"column(team_id);pk;auto;unique;" json:"team_id"`
15-
TeamName string `orm:"column(team_name);size(255);description(团队名称)" json:"team_name"`
16-
MemberId int `orm:"column(member_id);type(int);description(创建人id)" json:"member_id"`
17-
IsDelete bool `orm:"column(is_delete);default(0);description(是否删除 0:否 1:是)" json:"is_delete"`
18-
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add;description(创建时间)" json:"create_time"`
15+
TeamName string `orm:"column(team_name);size(255);description(团队名称)" json:"team_name"`
16+
MemberId int `orm:"column(member_id);type(int);description(创建人id)" json:"member_id"`
17+
IsDelete bool `orm:"column(is_delete);default(false);description(是否删除 false:否 true:是)" json:"is_delete"`
18+
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add;description(创建时间)" json:"create_time"`
1919
MemberCount int `orm:"-" json:"member_count"`
2020
BookCount int `orm:"-" json:"book_count"`
2121
MemberName string `orm:"-" json:"member_name"`

0 commit comments

Comments
 (0)