-- SQL запрос для проверки дубликатов claim_id в таблице clpr_claims -- Показывает записи с одинаковым claim_id в payload, но разными ID -- 1. Найти все claim_id, которые встречаются более одного раза WITH claim_id_counts AS ( SELECT payload->>'claim_id' AS claim_id, COUNT(*) AS count, array_agg(id ORDER BY updated_at DESC) AS ids, array_agg(updated_at ORDER BY updated_at DESC) AS updated_dates FROM clpr_claims WHERE payload->>'claim_id' IS NOT NULL GROUP BY payload->>'claim_id' HAVING COUNT(*) > 1 ) SELECT claim_id, count AS duplicate_count, ids AS record_ids, updated_dates, -- Показываем разницу во времени между записями updated_dates[1] - updated_dates[array_length(updated_dates, 1)] AS time_diff FROM claim_id_counts ORDER BY count DESC, claim_id LIMIT 20; -- 2. Детальная информация о дубликатах (для конкретного claim_id) -- Замените 'YOUR_CLAIM_ID' на реальный claim_id /* SELECT id, payload->>'claim_id' AS claim_id, status_code, channel, created_at, updated_at, -- Показываем, есть ли send_to_form_approve в разных записях CASE WHEN payload->'send_to_form_approve' IS NOT NULL THEN 'YES' ELSE 'NO' END AS has_send_to_form_approve, -- Показываем размер payload для сравнения pg_column_size(payload) AS payload_size_bytes FROM clpr_claims WHERE payload->>'claim_id' = 'YOUR_CLAIM_ID' ORDER BY updated_at DESC; */ -- 3. Статистика: сколько всего дубликатов SELECT COUNT(*) AS total_duplicate_claim_ids, SUM(count) AS total_duplicate_records FROM ( SELECT payload->>'claim_id' AS claim_id, COUNT(*) AS count FROM clpr_claims WHERE payload->>'claim_id' IS NOT NULL GROUP BY payload->>'claim_id' HAVING COUNT(*) > 1 ) AS duplicates;