Categorygithub.com/zhikh23/pgutils
modulepackage
1.1.0
Repository: https://github.com/zhikh23/pgutils.git
Documentation: pkg.go.dev

# README

pgutils

Go-библиотека шаблонных функций для работы с СУБД PostgreSQL.

Установка

go get -u github.com/zhikh23/pgutils

Примеры использования

Exec предназначен для запросов, которые не возвращают результат. Например, простой INSERT INTO.

err := pgutils.Exec(ctx, db, `INSERT INTO users (id, name) VALUES ($1, $2)`, 1, "John")
if err != nil {
    ...
}

Get предназначен для запросов, которые могут вернуть не более одного результата. Например, SELECT по первичному ключу.

var name string
err := pgutils.Get(ctx, db, &name, `SELECT name FROM users WHERE id = $1`, 1)
if err != nil {
    if errors.Is(err, sql.ErrNoRows) {
        // not found
        ...
    }
    // another error
}

Select предназначен для запросов, которые могут вернуть произвольное количество результатов.

var names []string
err := pgutils.Select(ctx, db, &names, `SELECT name FROM users`)
if err != nil {
    ...
}

RunTx оборачивает функцию в транзакцию. В случае если функция возвращает ошибку, транзакция отменяется (tx.Rollback). Если функция возвращает nil, транзакция автоматически применяется (tx.Commit). Если завершение транзакции завершилось с ошибкой, объединяет ошибку закрытия транзакции и ошибку внутри транзакции.

pgutils.RunTx(ctx, db,  func(tx *sqlx.Tx) error {
    err := pgutils.Exec(ctx, tx, `UPDATE users SET balance = 100 WHERE name = "Bob"`)
	if err != nil {
        return err
    }

    err = pgutils.Exec(ctx, tx, `UPDATE users SET balance = -100 WHERE name = "John"`)
	if err != nil {
        return err
    }
})

# Functions

Exec does not returns result from query.
Get returns no more than one result from query.
No description provided by the author
RunTx wraps the function into a transaction.
Select returns multiple results from query.

# Constants

No description provided by the author

# Interfaces

No description provided by the author

# Type aliases

No description provided by the author