Для практики использования пакета database/sql
мы напишем консольное приложение, которое будет выполнять запросы к PostgreSQL базе используя github.com/lib/pq
драйвер.
В качестве данных будем использовать базу данных Northwind. База будет запущена в docker контейнере, а приложение будет подключаться к ней используя прокинутый из контейнера порт. Все скрипты по запуску и остановке базы данных будут находиться в Makefile.
make stop-db
- останавливает базу данныхmake run-db
- запускает базу данныхmake run-queries
- запускает приложение. При первом запуске используйтеmake run-queries INIT=true
для инициализации базы данных
Вам необходимо запустить базу в контейнере, а потом реализовать все методы в Querier так, чтобы при запуске приложения оно выполняло все запросы и выводило результаты в консоль.
Плюсом будет:
- написание своих запросов, которые вы найдете интересными
- рефакторинг кода, чтобы устранить повторяющиеся части кода связанные со сканированием данных из результата запроса
import (
"database/sql"
_ "embed" // necessary to use go:embed directive
_ "github.com/lib/pq" // load "postgres" driver
)
//go:embed northwind.sql
var initScript string
Мы используем директиву go:embed
для того чтобы встроить в бинарник SQL скрипт, который будет использоваться для инициализации базы данных.
Для этого мы должны сделать import "embed"
и для того чтобы импорт, который мы не используем не вызывал ошибку, мы делаем _ "embed"
.
Для похожих целей мы также импортируем драйвер для PostgreSQL _ "github.com/lib/pq"
. Он должен находится в приложении чтобы пакет database/sql
мог его использовать, но так как мы напрямую его использовать не будем, нам нужно его импортировать с подчеркиванием