프로젝트 소개

lib/pq는 Go의 표준 database/sql 패키지와 통합되는 PostgreSQL 드라이버의 순수 Go 구현입니다. 현재 유지 관리되는 모든 PostgreSQL 버전을 지원하며, libpq와 호환되는 친숙한 DSN 형식을 제공하여 key=value 및 postgres:// URL 스타일 연결 문자열을 모두 허용합니다. 주요 기능은 다음과 같습니다: - **인증**: PASSWORD, MD5, SCRAM-SHA256을 기본 지원합니다. 선택적 GSS/Kerberos 인증은 불필요한 종속성을 피하기 위해 별도의 auth/kerberos 모듈을 통해 사용할 수 있습니다. pgpass 파일 지원도 포함됩니다. - **대량 가져오기**: COPY [..] FROM STDIN을 지원하여 트랜잭션 내에서 효율적인 대량 데이터 로딩이 가능합니다. - **LISTEN/NOTIFY**: pq.Listener 유형이 Go 채널에 PostgreSQL 알림을 전달하여 실시간 이벤트 기반 패턴을 가능하게 합니다. - **오류 처리**: PostgreSQL 오류는 구조화된 필드를 가진 pq.Error로 반환됩니다. pq.As 헬퍼는 오류를 유형화된 pq.Error 값으로 변환하며, ErrorWithDetail()은 디버깅을 위한 DETAIL 및 CONTEXT 정보를 포함합니다. - **NOTICE 처리**: PostgreSQL의 정보성 NOTICE 메시지는 구성 가능한 콜백 핸들러를 통해 캡처할 수 있습니다. - **런타임 매개변수**: libpq와 달리 pq는 search_path 또는 work_mem과 같은 런타임 매개변수를 연결 문자열에 직접 설정할 수 있습니다. - **Config 구조체**: pq.Config 구조체는 프로그래밍 방식의 연결 구성을 제공하며, pq.NewConfig는 DSN 문자열을 구문 분석하고 pq.NewConnectorConfig는 커넥터를 생성합니다. README에 문서화된 주의 사항에는 LastInsertId가 지원되지 않으며(대신 INSERT ... RETURNING 사용), 타임스탬프 처리는 timestamptz에 서버 시간대를 사용하고 timestamp(시간대 없음)에 고정된 제로 오프셋 영역을 사용하며, COPY 중 bytea 인코딩은 jsonb 열에서 문제를 일으킬 수 있습니다. 이 프로젝트는 Docker Compose를 통해 여러 PostgreSQL 버전, pgbouncer 및 pgpool에 대해 실행 가능한 포괄적인 테스트 스위트를 포함합니다. PQGO_DEBUG=1 환경 변수는 문제 해결을 위한 프로토콜 수준 디버그 출력을 활성화합니다.