Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Package dbx

Пакет dbx предоставляет функциональность для работы с базой данных PostgreSQL, включая настройку пула соединений, выполнение миграций через goose и возможностью создавать схемы БД.

Types

Client

Клиент для взаимодействия с базой данных PostgreSQL, расширяющий клиент из пакета db. По умолчанию максимальное количество открытых соединений равно CPU * 10.

Methods:

Содержит все методы клиента-предшественника.

Open(ctx context.Context, config Config, opts ...Option) (*Client, error)

Создать соединение к базе данных по переданной конфигурации подключения. Доступные опции:

  • WithQueryTracer(tracers ...pgx.QueryTracer) Option – трассировка запросов с объектами реализующими интерфейс pgx.QueryTracer.
  • WithMigrationRunner(migrationDir string, logger log.Logger) Option – применить sql-скрипты для миграции, находящиеся в указанной директории.
  • WithCreateSchema(createSchema bool) Option – включить/выключить функцию создания схемы БД.
  • WithApplicationName(moduleName string) Option - указать название модуля в поле application_name таблицы серверных процессов

Usage

Default usage flow

package main

import (
	"context"
	"log"

	"github.com/txix-open/isp-kit/dbx"
	log2 "github.com/txix-open/isp-kit/log"
)

func main() {
	logger, err := log2.New()
	if err != nil {
		log.Fatal(err)
	}

	ctx := context.Background()
	cfg := dbx.Config{
		Host:     "127.0.0.1",
		Port:     5432,
		Database: "test",
		Username: "test",
		Password: "test", 
		MaxOpenConn: 10,
	}

	/* create client with migrations */
	cli, err := dbx.Open(
		ctx,
		cfg,
		dbx.WithMigrationRunner("./migrations", logger),
		dbx.WithQueryTracer(dbx.NewLogTracer(logger)),
	)
	if err != nil {
		log.Fatal(err)
    }

	var result int
	err = cli.SelectRow(ctx, &result, "SELECT COUNT(*) FROM users")
	if err != nil {
		log.Fatal(err)
	}
}

Connecting to db in slave mode

package main

import (
	"context"
	"log"

	"github.com/txix-open/isp-kit/dbx"
	log2 "github.com/txix-open/isp-kit/log"
)

func main() {
	/* create client with migrations */
	cli, err := dbx.Open(context.Background(), dbx.Config{
      Host:     "127.0.0.1",
      Port:     5432,
      Database: "test",
      Username: "test",
      Password: "test",
      Params: map[string]string{
        "target_session_attrs": "read-write",
      },
    })
    if err != nil {
        log.Fatal(err)
    }
}