Sobes.tech
Junior — Middle

Kas saaksite selgitada, mis on tehing PostgreSQL andmebaasi haldussüsteemis?

sobes.tech AI

Vastus AI-lt

В PostgreSQL транзакция — это последовательность операций с базой данных, которые выполняются как единое целое. Транзакция гарантирует, что либо все операции внутри неё будут успешно выполнены, либо ни одна из них не повлияет на данные (атомарность). Это важно для сохранения целостности данных.

Транзакции обеспечивают свойства ACID:

  • Атомарность — все операции внутри транзакции выполняются полностью или не выполняются вовсе.
  • Согласованность — после транзакции база данных остаётся в корректном состоянии.
  • Изолированность — параллельные транзакции не мешают друг другу.
  • Долговечность — после подтверждения транзакции изменения сохраняются даже при сбоях.

Пример использования транзакции в Go с PostgreSQL:

import (
    "database/sql"
    _ "github.com/lib/pq"
)

func example(db *sql.DB) error {
    tx, err := db.Begin()
    if err != nil {
        return err
    }

    _, err = tx.Exec("INSERT INTO users(name) VALUES($1)", "Alice")
    if err != nil {
        tx.Rollback()
        return err
    }

    _, err = tx.Exec("UPDATE accounts SET balance = balance - 100 WHERE user_id = $1", 1)
    if err != nil {
        tx.Rollback()
        return err
    }

    return tx.Commit()
}

В этом примере обе операции либо выполнятся вместе, либо не будут применены вовсе.