init.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package postgres
  2. import (
  3. "context"
  4. e "errors"
  5. "fmt"
  6. "github.com/jackc/pgconn"
  7. "github.com/jackc/pgx/v4"
  8. "github.com/jackc/pgx/v4/pgxpool"
  9. "github.com/sirupsen/logrus"
  10. "video_course/errors"
  11. "video_course/global"
  12. )
  13. var writeDB *pgxpool.Pool
  14. func Init() {
  15. logrus.Info("初始化数据库")
  16. dbCfg, err := global.Config.GetPostgreSQL()
  17. if err != nil {
  18. panic(err)
  19. }
  20. writeCfg := dbCfg.Write
  21. connStr := fmt.Sprintf("host=%s port=%d user=%s dbname=%s password=%s sslmode=disable TimeZone=Asia/Shanghai",
  22. writeCfg.Host, writeCfg.Port, writeCfg.User, global.Project.DBName, writeCfg.Password)
  23. writeDB, err = pgxpool.Connect(context.Background(), connStr)
  24. if err != nil {
  25. logrus.Panicf("连接数据库失败:%v\n", err)
  26. panic(err)
  27. }
  28. }
  29. type base struct {
  30. c context.Context
  31. }
  32. func (b base) ctx() context.Context {
  33. if b.c == nil {
  34. b.c = context.Background()
  35. }
  36. return b.c
  37. }
  38. func (b base) writeDB() *pgxpool.Pool {
  39. return writeDB
  40. }
  41. func panicError(err error) {
  42. if err != nil {
  43. err = errors.NewFromError(err, errors.CodeDATABASE)
  44. panic(err)
  45. }
  46. }
  47. func panicExec(tag pgconn.CommandTag, err error) {
  48. if err != nil {
  49. if e.Is(err, pgx.ErrNoRows) {
  50. err = errors.NewFromError(err, errors.CodeNoRecord)
  51. } else {
  52. err = errors.NewFromError(err, errors.CodeDATABASE)
  53. }
  54. panic(err)
  55. }
  56. }
  57. func isRecordNotFound(err error) bool {
  58. if e.Is(err, pgx.ErrNoRows) {
  59. return true
  60. } else {
  61. panicError(err)
  62. return false
  63. }
  64. }