que tienen una aplicación cliente que utiliza C# Npgsql llamar a una función plpgsql en PostgreSQL 9.1.4. La función lleva mucho tiempo y me gustaría informar el progreso al cliente de alguna manera. ¿Cómo debería hacer esto?Cómo informe de situación de la función de PostgreSQL de larga duración a cliente
El mecanismo LISTEN/NOTIFY suena perfecto para esto, excepto que todo se ejecuta dentro de una transacción y los eventos NOTIFY no se envían hasta el final de la transacción, lo cual es inútil para mí.
La otra cosa que he intentado es levantar AVISO, que puedo procesar en el cliente, pero incluso los avisos parecen estar amortiguada por un tiempo y enviado por lotes. Es mejor que nada, pero no es ideal. ¿Hay alguna forma de que pueda "vaciarlos", para que sean enviados al cliente de inmediato?
Con PostgreSQL 8.4 y superior, también puede proporcionar un código de error para RAISE AVISO, que hace que sea más fácil distinguir entre los mensajes de progreso y otros avisos que podrían emitirse. –
Tiene razón, resulta que las NOTIFICACIONES * se * entregaron a medida que se generaban, pero hubo una desaceleración muy extraña en la función, lo que no ocurrió cuando ejecuté la misma consulta directamente. He descubierto una solución para eso ahora. – EM0
SUBIR AVISO tiene una sobrecarga significativa relativa - apretón de manos es la red entre el cliente y el servidor. Por lo general no plantea noto cada iteración, pero noto cada mil iteración. –