LINUX.ORG.RU

golang, psql, pgbouncer

 ,


0

2

Всем привет!

Есть код который запрашивает из базы строку.

err := db.QueryRow(`SELECT data FROM table WHERE key=$1;`, sessionKey).Scan(&sessionDataString)
if err != nil && err == sql.ErrNoRows {
    fmt.Errorf("get user ID error: %v", err)
    return
}

Часто все работает корректно, но есть довольно странное для меня поведение: аргумент запроса меняется, а ответ нет. Есть подозрение что я не умею работать с pgbouncer, но каких-то ограничений или рекомендаций не нашел. Кто-то с подобным сталкивался?



Последнее исправление: cetjs2 (всего исправлений: 1)

Ванга mode on:

Ты ловишь не все возможные ошибки в строке err != nil && err == sql.ErrNoRows, поэтому когда запрос фейлится - ничего не происходит.

А так как sessionDataString - это какая-то глобальная переменная, она остаётся со старым значением, которое было записано в предыдущем удачном запросе.

SwiftLang
()
Ответ на: комментарий от SwiftLang

Бинго!

Но я нашел уже этот свой косяк. Теперь пытаюсь скудым своим умом понять другое: есть 100 одинаковых запросов к базе, запрос обложил mutex'ом для верности, и 99 срабатывает 1 - нет. Есть подозрение что заканчиваются конекты к базе, но как это проверить - ума не приложу.

gadzira
() автор топика
Ответ на: комментарий от gadzira

99 срабатывает 1 - нет

Ошибку какую возвращает запрос? Там всё должно быть написано. Есть чо?

anonymous
()
Ответ на: комментарий от anonymous

В том-то и дело что нет ошибок. err == nil

gadzira
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.