startup_postgres

package module
v1.1.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 30, 2019 License: MIT Imports: 14 Imported by: 3

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNoTransaction = errors.New("no transaction in context")
View Source
var WithTransactionContext = func(ctx context.Context, db TxStarter, operation TransactionCommitFn) (err error) {
	var tx *sqlx.Tx
	var commit bool

	tx, err = db.BeginTxx(ctx, nil)
	if err != nil {
		return errors.WithMessage(err, "begin transaction")
	}

	defer func() {
		r := recover()

		if r == nil && err == nil && commit {

			if err = tx.Commit(); err != nil {
				err = errors.WithMessage(err, "commit")
			}

		} else {
			if err := tx.Rollback(); err != nil {
				logrus.Warnf("Could not rollback transaction: %s", err)
			}

			if r != nil {
				var ok bool
				if err, ok = r.(error); !ok {
					err = fmt.Errorf("%#v", err)
				}
			}

			err = errors.WithMessage(err, "transaction")
		}
	}()

	commit, err = operation(ContextWithTransaction(ctx, tx), tx)

	return
}

Creates a new transaction, puts it into the context and runs the given operation with the context and the transaction. This is a var so that you are able to replace it with your own function to enable tracing during initialization of your application.

Functions

func ContextWithTransaction added in v1.1.0

func ContextWithTransaction(ctx context.Context, tx *sqlx.Tx) context.Context

Puts a transaction into a context and returns the new context with the transaction

func ErrIsForeignKeyViolation

func ErrIsForeignKeyViolation(err error) bool

func ErrIsUniqueViolation

func ErrIsUniqueViolation(err error) bool

func TransactionFromContext added in v1.1.0

func TransactionFromContext(ctx context.Context) *sqlx.Tx

Gets the current transaction from the context or nil, if the context does not contain a transaction.

func WithTransaction deprecated

func WithTransaction(db TxStarter, fn func(tx *sqlx.Tx) error) (err error)

Ends the given transaction. This method will either commit the transaction if the given recoverValue is nil, or rollback the transaction if it is non nil.

Deprecated: Use a variant of this function that includes a context argument.

func WithTransactionAutoCommitContext added in v1.1.4

func WithTransactionAutoCommitContext(ctx context.Context, db TxStarter, operation TransactionFn) (err error)

func WithTransactionFromContext added in v1.1.0

func WithTransactionFromContext(ctx context.Context, operation func(tx *sqlx.Tx) error) error

Calls the given operation with the transaction that is currently stored in the context. Will fail with ErrNoTransaction if there is no transaction stored in the context.

Types

type Initializer

type Initializer func(db *sqlx.DB) error

func DefaultMigration

func DefaultMigration(table string) Initializer

Creates an Initializer that performs a database migration by looking for sql files in the default directories.

func Migration

func Migration(table, directory string) Initializer

Runs a migration with the sql files from the given directory. The directory must exist. The migration library will use the given table name to store the migration progress

type PostgresOptions

type PostgresOptions struct {
	URL      string `long:"postgres" default:"postgres://postgres:postgres@localhost:5432?sslmode=disable" description:"Postgres server url."`
	PoolSize int    `` /* 133-byte string literal not displayed */

	ConnectionLifetime time.Duration `long:"postgres-lifetime" default:"10m" description:"Maximum time a connection in the pool can be used."`

	Inputs struct {
		// the driver name to use. If this is empty,
		// we select the default of 'postgres' or 'pgx',
		// depending on availability
		DriverName string

		// An optional initializer. This might be used to do
		// database migration or stuff.
		Initializer Initializer
	}
	// contains filtered or unexported fields
}

func (*PostgresOptions) Connection

func (opts *PostgresOptions) Connection() *sqlx.DB

func (*PostgresOptions) StartVacuumTask

func (opts *PostgresOptions) StartVacuumTask(db *sqlx.DB, table string, interval time.Duration, clock clock.Clock) io.Closer

type TransactionCommitFn added in v1.1.4

type TransactionCommitFn func(ctx context.Context, tx *sqlx.Tx) (commit bool, err error)

type TransactionFn added in v1.1.0

type TransactionFn func(ctx context.Context, tx *sqlx.Tx) error

type TxHelper added in v1.1.1

type TxHelper struct {
	*sqlx.DB
}

func NewTxHelper added in v1.1.1

func NewTxHelper(db *sqlx.DB) TxHelper

func (*TxHelper) WithTransaction deprecated added in v1.1.1

func (h *TxHelper) WithTransaction(fn func(tx *sqlx.Tx) error) (err error)

Deprecated: Stop using this and start using the WithTransaction function that includes the context argument

func (*TxHelper) WithTransactionContext added in v1.1.1

func (h *TxHelper) WithTransactionContext(ctx context.Context, operation TransactionCommitFn) error

func (*TxHelper) WithTransactionContextAutoCommit added in v1.1.4

func (h *TxHelper) WithTransactionContextAutoCommit(ctx context.Context, operation TransactionFn) error

type TxStarter added in v1.1.1

type TxStarter interface {
	BeginTxx(ctx context.Context, opts *sql.TxOptions) (*sqlx.Tx, error)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL