Об этом проекте

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 включает вывод отладки на уровне протокола для устранения неполадок.