Go + Postgres: ¿pgx directo o database/sql? (y cómo manejan el pool)
Parce, sigo aprendiendo Go con tincho (gracias maestro) y ya estoy pasando un servicio pequeño de Node a Go. Tengo dudas con Postgres: ¿Usan pgx directo ( pgxpool ) o database/sql con el driver pgx/v5/stdlib ? Leí que pgx directo es más rápido pero no sé si vale la pena. ¿Cuántas conexiones ponen en el pool? En Node tenía max: 10 en pg y no sé si en Go es igual. ¿sqlc o escribir las queries a mano? El servicio es…
Accepted answer
Buenísimo que estés migrando! Te respondo en orden: 1. Si es un servicio nuevo y solo Postgres, pgx directo con pgxpool. Tenés mejor soporte de tipos de Postgres (arrays, jsonb, uuid), COPY, LISTEN/NOTIFY y errores más claros. database/sql te conviene solo si querés poder cambiar de base o usás una librería que lo pide. 2. El pool: pgxpool por defecto usa el mayor entre 4 y la cantidad de CPUs. Para 20 rps sobra. Yo lo configuro en la URL: postgres://user:pass@host:5432/reservas?pool_max_conns=10&pool_max_conn_idle_time=5m Y ojo: pool_max_conns es POR INSTANCIA. Con tus 4 réplicas son 40 conexiones contra Postgres. Si después metés un pooler tipo PgBouncer en modo transaction, revisá el tema de los prepared statements. 3. sqlc, sin dudas. Escribís SQL de verdad, te genera el código Go tipado, y si cambiás una columna no compila. Para queries dinámicas (filtros opcionales) a veces escribo a mano. Y pasale el ctx del request a todas las queries, como en el post de context 😉