diff --git a/lectures/07-sql/alive/ping.go b/lectures/07-sql/alive/ping.go index 3b259d2..e7ffded 100644 --- a/lectures/07-sql/alive/ping.go +++ b/lectures/07-sql/alive/ping.go @@ -8,14 +8,14 @@ import ( _ "github.com/jackc/pgx/v4/stdlib" ) -func IsItAliveQuestionMark() { +func IsItAliveQuestionMark(ctx context.Context) { db, err := sql.Open("pgx", "postgres://pgx_md5:secret@localhost:5432/pgx_test") if err != nil { log.Fatal(err) } defer db.Close() - if err := db.PingContext(context.Background()); err != nil { + if err := db.PingContext(ctx); err != nil { log.Fatal(err) } } diff --git a/lectures/07-sql/sql.slide b/lectures/07-sql/sql.slide index 5591789..d410833 100644 --- a/lectures/07-sql/sql.slide +++ b/lectures/07-sql/sql.slide @@ -1,5 +1,5 @@ database/sql -Лекция 7 +Лекция 9 Синельников Илья @@ -12,8 +12,8 @@ database/sql - абстракция для работы с SQL базами данных - набор интерфейсов для написания драйверов -- многие драйверы имеют "расширенный" функционал -- не умеет некоторые продвинутые возможности (например, батчинг) +- нет продвинутых возможностей (например, батчинг) +- драйверы часто имеют расширенный API .code sql/driver.go /^type Driver/,/^}/ .code sql/driver.go /^type QueryerContext/,/^}/ @@ -29,12 +29,12 @@ database/sql * Основные сущности - DB - connection pool к базе -- Rows - результаты запроса +- Rows - результат запроса - Row - одна строка из результата запроса - Null* - типы для работы с Null значениями - Tx - транзакция -- Stmt - подготовленый запрос - Conn - одно подключение к базе +- Stmt - подготовленый запрос * Проверка доступности @@ -78,11 +78,11 @@ database/sql * Null в результатах .code nulls/rows.go /^func Results/,/^}/ -* Одно подключение +* Работа с конкретным подключением к БД .code conn/conn.go /^func Conn/,/^}/ -* Транзакции +* Работа с транзакциями .code tx/tx.go /^func Begin/,/^}/ @@ -95,6 +95,7 @@ database/sql Минусы: - удобство - производительность +- несовместимы с некоторыми режимами работы пулеров коннектов * Prepare @@ -117,32 +118,31 @@ database/sql * Основные типы граблей -- исчерпание ресурсов +- неосвобождение ресурсов - дедлоки -- комбинация первого и второго - нюансы каждого отдельного драйвера -* Context +* Context - вечные запросы .code resources/ctx.go /^func NoContext/,/^}/ -* Запросы - исчерпание ресурсов +* Запросы - неосвобождение ресурсов .code resources/rows.go /^func RowsExhaust/,/^}/ -* Коннекты - исчерпание ресурсов +* Коннекты - неосвобождение ресурсов .code resources/conn.go /^func ConnExhaust/,/^}/ -* Транзакции - исчерпание ресурсов +* Транзакции - неосвобождение ресурсов .code resources/tx.go /^func TxExhaust/,/^}/ -* Транзакции - deadlock +* Транзакции - исчерпание ресурсов приводящее к deadlock .code resources/tx.go /^func TxDeadlock/,/^}/ -* Запросы - deadlock +* Запросы - исчерпание ресурсов приводящее к deadlock .code resources/queries.go /^func QueryDeadlock/,/^}/