Recibo este error cada vez que ejecuto yarn knex seed:run
:
Error al ejecutar la semilla "/home/user/path-to-the-file/my-seed.js": Knex: se agotó el tiempo de adquisición de una conexión. Probablemente la piscina esté llena. ¿Te estás perdiendo una llamada .transacting(trx)?
El problema es que le envío el proyecto a otras personas y pueden ejecutarlo normalmente, ya probé todas las respuestas al respecto en Internet, ya no sé qué hacer.
Configuración de mi base de datos:
const config = Object.freeze({ client: 'pg', pool: { min: 0, max: 5, idleTimeoutMillis: 30000, createTimeoutMillis: 3000, acquireTimeoutMillis: 30000, reapIntervalMillis: 1000, createRetryIntervalMillis: 100, propagateCreateError: false }, connection: Object.freeze({ ...database }) })
Ya intenté degradar pg y node, no funcionó, nada funciona.
Hay un problema en el repositorio de Knex que dice que la actualización a la última pg
lo resuelve, pero tampoco funcionó: https://github.com/knex/knex/issues/2820
¿Alguien me puede ayudar?
Una manera fácil de crear este error es hacer esto:
const rows = []; for (let i = 0; i < 10000; i++) { rows.push({ name : `foo ${i}` }); } await Promise.all(rows.map(data => knex('user').insert(data)));
Hay infinitas formas de quedarse sin conexiones, pero la mayoría de los casos habituales son abrir demasiadas transacciones simultáneas o ejecutar una gran cantidad de consultas paralelas.
La mejor manera de averiguar la razón por la que sucede es eliminar partes del código problemático hasta que el error ya no ocurra y luego investigar por qué falla ese caso de prueba reducido.
Una buena manera de ver lo que knex está haciendo internamente es configurar la variable de entorno DEBUG=knex:*
antes de ejecutar el código para que knex genere información sobre consultas, transacciones y conexiones de grupo mientras se ejecuta el código.
se enfrentó a un problema similar, subió pg a 8.7.1 y funcionó
también nodo a 16.3.1 y knex a 0.95.11