Sobre el proyecto
lib/pq es una implementación en Go puro de un controlador de PostgreSQL que se integra con el paquete estándar database/sql de Go. Admite todas las versiones de PostgreSQL actualmente mantenidas y ofrece un formato DSN familiar compatible con libpq, aceptando tanto cadenas de conexión key=value como cadenas estilo URL postgres://.
Las características principales incluyen:
- **Autenticación**: Admite PASSWORD, MD5 y SCRAM-SHA256 de forma predeterminada. La autenticación opcional GSS/Kerberos está disponible mediante un módulo auth/kerberos independiente para evitar dependencias innecesarias. También incluye soporte para archivos pgpass.
- **Importaciones masivas**: COPY [..] FROM STDIN es compatible para cargas eficientes de datos en bloque dentro de transacciones.
- **LISTEN/NOTIFY**: Un tipo pq.Listener entrega notificaciones de PostgreSQL en un canal de Go, permitiendo patrones en tiempo real orientados a eventos.
- **Manejo de errores**: Los errores de PostgreSQL se devuelven como pq.Error con campos estructurados. El auxiliar pq.As convierte errores en valores pq.Error tipados, y ErrorWithDetail() incluye información DETAIL y CONTEXT para depuración.
- **Manejo de NOTICE**: Los mensajes informativos NOTICE de PostgreSQL pueden capturarse mediante un manejador de devolución de llamada configurable.
- **Parámetros de tiempo de ejecución**: A diferencia de libpq, pq permite establecer parámetros de tiempo de ejecución como search_path o work_mem directamente en la cadena de conexión.
- **Struct Config**: Un struct pq.Config proporciona configuración programática de la conexión, con pq.NewConfig analizando cadenas DSN y pq.NewConnectorConfig creando un conector.
Las advertencias documentadas en el README incluyen: LastInsertId no es compatible (use INSERT ... RETURNING en su lugar), el manejo de marcas de tiempo usa la zona horaria del servidor para timestamptz y una zona fija con desplazamiento cero para timestamp sin zona horaria, y la codificación bytea durante COPY puede causar problemas con columnas jsonb.
El proyecto incluye un conjunto de pruebas completo ejecutable mediante Docker Compose contra múltiples versiones de PostgreSQL, pgbouncer y pgpool. La variable de entorno PQGO_DEBUG=1 habilita la salida de depuración a nivel de protocolo para la resolución de problemas.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.