2015-08-05 5 views
1

Я хочу установить уровень изоляции repeatable read. Как достичь этого с помощью gorm orm для postgres.Как установить уровень изоляции

Пример кода:

func CreateAnimals(db *gorm.DB) err { 
    tx := db.Begin() 
    // Note the use of tx as the database handle once you are within a transaction 

    if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil { 
    tx.Rollback() 
    return err 
    } 

    if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil { 
    tx.Rollback() 
    return err 
    } 

    tx.Commit() 
    return nil 
} 
+0

Ваше название просто говорит «GORM», но разве это не полностью зависит от используемого драйвера базы данных? Например. для PostgreSQL вам необходимо настроить параметры подключения по умолчанию к базе данных, выполнить команду ['SET TRANSACTION'] (http://www.postgresql.org/docs/9.5/static/sql-set-transaction.html) или посмотрите, может ли этот конкретный драйвер Go PostgreSQL использовать (более одного). –

+2

Конечно, ['DB.Begin'] (https://golang.org/pkg/database/sql/#DB.Begin) (это то, что использует GORM) говорит:« Уровень изоляции зависит от драйвера ». Поиск 'github.com/lib/pq' (вы не сказали, какой драйвер вы использовали) дает несколько советов в [issue 261] (https://github.com/lib/pq/issues/261). –

+0

Да, я использую драйвер 'github.com/lib/pq'. Спасибо! Вопрос отвечает на мой вопрос, я попробую. – Kennedy

ответ

3

У меня была точно такая же проблема here:

func GetPageAfterUpdate(dp model.DbProvider, id int, update int, page *Page) (err error) { 
    tx := dp.DB().Begin() 

    err = tx.Exec(`set transaction isolation level repeatable read`).Error 
    if err != nil { 
    tx.Rollback() 
    return 
    } 

И это именно Горм с пг.

Смежные вопросы