-- Schema for data quality metrics -- This table stores aggregated metrics per customer to support the dashboard CREATE TABLE IF NOT EXISTS sync_metrics ( id SERIAL PRIMARY KEY, customer_id UUID NOT NULL, table_name TEXT NOT NULL, row_count BIGINT NOT NULL DEFAULT 0, last_sync_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), drift_detected BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Index for fast lookup by customer and table CREATE INDEX IF NOT EXISTS idx_sync_metrics_customer_table ON sync_metrics (customer_id, table_name); -- We only keep the latest metric per customer/table to keep the table small -- This is a partial unique index to enforce uniqueness on the latest record CREATE UNIQUE INDEX IF NOT EXISTS idx_sync_metrics_latest ON sync_metrics (customer_id, table_name) WHERE created_at = ( SELECT MAX(created_at) FROM sync_metrics sm2 WHERE sm2.customer_id = sync_metrics.customer_id AND sm2.table_name = sync_metrics.table_name );