Пакет db предоставляет клиент-обёртку над библиотекой sqlx с интеграцией pgx для работы с PostgreSQL. Реализует
функциональность подключения к базе данных, выполнения запросов, транзакций и настройки трассировки запросов
Основная структура-клиент для взаимодействия с базой данных PostgreSQL
Methods:
Содержит все методы клиента-предшественника из sqlx.
Создать подключение к базе данных по переданному dsn. Доступные опции:
WithQueryTracer(tracers ...pgx.QueryTracer) Option– трассировка запросов с объектами реализующими интерфейсpgx.QueryTracer.
Выполнить sql-запрос с возвращением данных из БД. Использует стандартные плейсхолдеры для позиционирования параметров.
Выполнить sql-запрос с возвращением одной строки данных из БД. Использует стандартные плейсхолдеры для позиционирования параметров.
Выполнить sql-запрос без возврата данных из БД. Использует стандартные плейсхолдеры для позиционирования параметров.
Выполнить sql-запрос без возврата данных из БД. Позволяет использовать имена полей вместо плейсхолдеров для позиционирования параметров в sql-запросе.
Выполнить функцию txFunc в рамках транзакции. Доступны опции:
IsolationLevel(level sql.IsolationLevel) TxOption– изменить уровень изоляции транзакцииReadOnly() TxOption– режим транзакции только на чтение
package main
import (
"context"
"database/sql"
"log"
"github.com/txix-open/isp-kit/db"
)
type user struct {
Name string
IsActive bool
}
func main() {
ctx := context.Background()
client, err := db.Open(ctx, "postgres://user:pass@localhost:5432/db")
if err != nil {
log.Fatal(err)
}
var users []user
err = client.Select(ctx, &users, "SELECT * FROM users WHERE is_active = $1", true) /* read data */
/* transaction */
err = client.RunInTransaction(ctx, func(ctx context.Context, tx *db.Tx) error {
res, err := tx.Exec(ctx, "UPDATE accounts SET balance = balance - $1", 100)
if err != nil {
return err
}
/* put here some business logic */
return nil
}, db.IsolationLevel(sql.LevelRepeatableRead))
if err != nil {
log.Fatal(err)
}
}