feat: 实现公共工具包,包括日志、错误处理、数据库和缓存
This commit is contained in:
79
backend/shared/pkg/database/postgres.go
Normal file
79
backend/shared/pkg/database/postgres.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"backend/shared/pkg/logger"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
type PostgresConfig struct {
|
||||
Host string
|
||||
Port int
|
||||
User string
|
||||
Password string
|
||||
DBName string
|
||||
SSLMode string
|
||||
}
|
||||
|
||||
type PostgresDB struct {
|
||||
DB *sql.DB
|
||||
}
|
||||
|
||||
// NewPostgresDB 创建新的 PostgreSQL 数据库连接
|
||||
func NewPostgresDB(config PostgresConfig) (*PostgresDB, error) {
|
||||
connStr := fmt.Sprintf(
|
||||
"host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
|
||||
config.Host, config.Port, config.User, config.Password, config.DBName, config.SSLMode,
|
||||
)
|
||||
|
||||
db, err := sql.Open("postgres", connStr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 设置连接池参数
|
||||
db.SetMaxOpenConns(25)
|
||||
db.SetMaxIdleConns(5)
|
||||
db.SetConnMaxLifetime(5 * time.Minute)
|
||||
|
||||
// 测试连接
|
||||
if err := db.Ping(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
logger.Info("Connected to PostgreSQL database")
|
||||
|
||||
return &PostgresDB{DB: db}, nil
|
||||
}
|
||||
|
||||
// Close 关闭数据库连接
|
||||
func (p *PostgresDB) Close() error {
|
||||
if p.DB != nil {
|
||||
return p.DB.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Exec 执行 SQL 语句
|
||||
func (p *PostgresDB) Exec(query string, args ...interface{}) (sql.Result, error) {
|
||||
return p.DB.Exec(query, args...)
|
||||
}
|
||||
|
||||
// Query 执行查询
|
||||
func (p *PostgresDB) Query(query string, args ...interface{}) (*sql.Rows, error) {
|
||||
return p.DB.Query(query, args...)
|
||||
}
|
||||
|
||||
// QueryRow 执行单行查询
|
||||
func (p *PostgresDB) QueryRow(query string, args ...interface{}) *sql.Row {
|
||||
return p.DB.QueryRow(query, args...)
|
||||
}
|
||||
|
||||
// Begin 开始事务
|
||||
func (p *PostgresDB) Begin() (*sql.Tx, error) {
|
||||
return p.DB.Begin()
|
||||
}
|
||||
Reference in New Issue
Block a user