Об этом проекте
lib/pq — это чистая реализация драйвера PostgreSQL на Go, которая интегрируется со стандартным пакетом database/sql. Он поддерживает все текущие поддерживаемые версии PostgreSQL и предоставляет знакомый формат DSN, совместимый с libpq, принимая как строки подключения в стиле key=value, так и URL-стиль postgres://.
Ключевые особенности включают:
- **Аутентификация**: Поддерживает PASSWORD, MD5 и SCRAM-SHA256 из коробки. Опциональная аутентификация GSS/Kerberos доступна через отдельный модуль auth/kerberos, чтобы избежать ненужных зависимостей. Также включена поддержка файла pgpass.
- **Массовый импорт**: Поддерживается COPY [..] FROM STDIN для эффективной массовой загрузки данных в транзакциях.
- **LISTEN/NOTIFY**: Тип pq.Listener доставляет уведомления PostgreSQL в Go-канал, обеспечивая шаблоны событийно-ориентированного программирования в реальном времени.
- **Обработка ошибок**: Ошибки PostgreSQL возвращаются как pq.Error с структурированными полями. Хелпер pq.As преобразует ошибки в типизированные значения pq.Error, а ErrorWithDetail() включает информацию DETAIL и CONTEXT для отладки.
- **Обработка NOTICE**: Информационные сообщения NOTICE от PostgreSQL можно перехватывать через настраиваемый обработчик обратного вызова.
- **Параметры времени выполнения**: В отличие от libpq, pq позволяет устанавливать параметры времени выполнения, такие как search_path или work_mem, непосредственно в строке подключения.
- **Структура Config**: Структура pq.Config обеспечивает программную настройку подключения, при этом pq.NewConfig разбирает строки DSN, а pq.NewConnectorConfig создает коннектор.
Предостережения, задокументированные в README, включают: LastInsertId не поддерживается (используйте INSERT ... RETURNING вместо этого), обработка временных меток использует серверный часовой пояс для timestamptz и фиксированный нулевой смещенный пояс для timestamp без часового пояса, а кодирование bytea во время COPY может вызвать проблемы с колонками jsonb.
Проект включает комплексный набор тестов, запускаемый через Docker Compose против нескольких версий PostgreSQL, pgbouncer и pgpool. Переменная окружения PQGO_DEBUG=1 включает вывод отладки на уровне протокола для устранения неполадок.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.