From 8153f9a4cb27502a81f7577f3d0cd69d4901781f Mon Sep 17 00:00:00 2001 From: perf3ct Date: Tue, 8 Jul 2025 22:04:24 +0000 Subject: [PATCH] fix(migrations): resolve PostgreSQL function type mismatch in get_ocr_queue_stats --- ...0250708000001_simplify_ocr_queue_stats.sql | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 migrations/20250708000001_simplify_ocr_queue_stats.sql diff --git a/migrations/20250708000001_simplify_ocr_queue_stats.sql b/migrations/20250708000001_simplify_ocr_queue_stats.sql new file mode 100644 index 0000000..5f86da9 --- /dev/null +++ b/migrations/20250708000001_simplify_ocr_queue_stats.sql @@ -0,0 +1,29 @@ +-- Simplify get_ocr_queue_stats function to avoid CTE structure issues +-- Use a simple SELECT with subqueries instead of CTEs and cross joins + +CREATE OR REPLACE FUNCTION get_ocr_queue_stats() +RETURNS TABLE ( + pending_count BIGINT, + processing_count BIGINT, + failed_count BIGINT, + completed_today BIGINT, + avg_wait_time_minutes DOUBLE PRECISION, + oldest_pending_minutes DOUBLE PRECISION +) AS $$ +BEGIN + RETURN QUERY + SELECT + COUNT(*) FILTER (WHERE status = 'pending') as pending_count, + COUNT(*) FILTER (WHERE status = 'processing') as processing_count, + COUNT(*) FILTER (WHERE status = 'failed' AND attempts >= max_attempts) as failed_count, + -- Get completed_today from documents table instead of ocr_queue + (SELECT COUNT(*)::BIGINT + FROM documents + WHERE ocr_status = 'completed' + AND updated_at >= CURRENT_DATE + AND updated_at < CURRENT_DATE + INTERVAL '1 day') as completed_today, + CAST(AVG(EXTRACT(EPOCH FROM (COALESCE(started_at, NOW()) - created_at))/60) FILTER (WHERE status IN ('processing', 'completed')) AS DOUBLE PRECISION) as avg_wait_time_minutes, + CAST(MAX(EXTRACT(EPOCH FROM (NOW() - created_at))/60) FILTER (WHERE status = 'pending') AS DOUBLE PRECISION) as oldest_pending_minutes + FROM ocr_queue; +END; +$$ LANGUAGE plpgsql; \ No newline at end of file