Desafortunadamente setTimeout no está implementado para JDBC/postgres. ¿Hay alguna manera de simular o solucionar esto? Funcionalmente quiero ejecutar la consulta y luego interrumpirla si lleva más tiempo que N segundosConsulta de postgres de JDBC con un tiempo de espera
Respuesta
El "statement_timeout" se parece a lo que desea.
SET statement_timeout TO 1000; -- for a second
<your_query_here>;
RESET statement_timeout; -- reset
Es mejor que use RESET statement_timeout; una vez completada la consulta, en caso de que haya un valor predeterminado ... –
Solucionado ahora, ¡gracias! –
Probado esto en pgAdmin3. Solo funcionó cuando el SET statement_timeout se ejecuta por separado de la consulta real. Cuando se ejecutan juntos, pgAdmin3 usa lo que sea que el valor de tiempo de espera ya haya sido establecido y no use el proporcionado con la consulta. – Babar
Una forma podría ser intentar ejecutar la consulta en una clase Timer. Lanza una excepción si el temporizador finaliza sin un valor devuelto.
Hibernate y JDO suministran tal construcción. Tal vez sean buenas alternativas para ti.
Tienes que tener cuidado de cómo se implementa esto; si se hace incorrectamente, terminas con muchos hilos bloqueados que contienen conexiones SQL que simplemente están siendo ignoradas. Parte del problema aquí es que no se puede obligar a un hilo a lanzar una excepción si está en medio de hacer algo. –
¿Qué sucede si utiliza c3p0 para su dataSource? Tiene muchas opciones configurables, y para bases de datos y redes malhumoradas, por ejemplo, acquireRetryAttempts, acquireRetryDelay y breakAfterAcquireFailure.
El uso de la palabra clave LOCAL limita el alcance del statement_timeout a la transacción actual. De esta forma, si algo sale mal (por ejemplo, se agota el tiempo de espera), se restablece el tiempo de espera.
BEGIN TRANSACTION;
SET LOCAL statement_timeout TO 1000; -- one-second timeout
SELECT COUNT(*) FROM really_huge_table; -- your slow query
ROLLBACK; -- reset
- 1. Tiempo de espera de MySql JDBC incluso con 'autoReconnect = true'
- 2. ¿ESCUCHA el tiempo de espera de la consulta con node-postgres?
- 3. ¿Puedo establecer un tiempo de espera JDBC para una sola consulta?
- 4. Cómo cancelar una consulta de postgres en java/JDBC
- 5. Dnspython: configuración de tiempo de espera/consulta de consulta
- 6. Forzando un tiempo de espera de consulta en SQL Server
- 7. JDBC- postgres, conexión rechazada
- 8. Postgres UTF-8 clobs con JDBC
- 9. GetMessage con un tiempo de espera
- 10. exec() con tiempo de espera
- 11. Tiempo de espera con jQuery.get()
- 12. feedparser con tiempo de espera
- 13. Hibernar: ¿establecer tiempo de espera de consulta predeterminado?
- 14. ¿Cómo se implementa el tiempo de espera de consultas JDBC de Oracle?
- 15. No se puede conectar a MySQL con JDBC - Tiempo de espera de conexión - Ubuntu 9.04
- 16. consulta de validación de jdbc
- 17. Cómo extender el tiempo de espera de una consulta SQL
- 18. Cómo evitar el tiempo de espera de consulta SQL
- 19. Cómo establecer un tiempo de espera para la consulta de MySQL con C API
- 20. Una consulta postgres lenta en Heroku no se ve interrumpida por el tiempo de espera de rack
- 21. Consulta de esquemas en Postgres
- 22. Tiempo de espera agotado - Tiempo de espera agotado
- 23. RabbitMQ Espere un mensaje con un tiempo de espera
- 24. Espere un solo mensaje RabbitMQ con un tiempo de espera
- 25. hibernate Excedido el tiempo de espera de espera de bloqueo;
- 26. WCF ¿Tiempo de espera?
- 27. ¿Qué hace poll() con un tiempo de espera de 0?
- 28. NSURLConnection tiempo de espera?
- 29. ¿Ejecutar instrucción con tiempo de espera?
- 30. jQuery getJSON con tiempo de espera
Encontré esta pregunta y respuesta útiles también para un problema de python/psycopg2 que encontré. Psycopg2 parece haber permitido la configuración del tiempo de espera en el momento de la conexión, pero esta interfaz se eliminó en mi caso. Agregando este comentario para beneficiar a otros que buscan en SO. – SetJmp