Untitled

 avatar
unknown
pgsql
a month ago
2.2 kB
12
Indexable
DO
$$
    DECLARE
        hall_id     UUID   := '06e1e862-dbae-4a99-9fea-6b8f682ad572'::UUID; --ID холла


        start_date     DATE   := '2024-07-30'; -- Для записей с какой даты будет подмена
        end_date       DATE   := '2024-10-01'; -- Для записей до какой даты будет подмена

        new_start_date DATE   := '2024-10-22'; -- Для записей до какой даты будет подмена
        new_end_date   DATE   := '2025-01-22'; -- Для записей до какой даты будет подмена

        limit_count    INT    := 100; -- Сколько записей для временного диапазона будет использовано для подмены
        table_name     TEXT;
        tables         TEXT[] := ARRAY [
            'common_referrals_transaction',
            'cpa_referrals_transaction',
            'rev_share_referrals_transaction',
            'rakeback_referrals_transaction',
            'withdraw_request'
            ]; -- Список таблиц для подмены
    BEGIN
        FOREACH table_name IN ARRAY tables
            LOOP
                EXECUTE format('WITH cte AS (
                                SELECT id
                                FROM %I
                                WHERE hall_id = $1
                                AND created_at >= $2
                                AND created_at <= $3
                                ORDER BY created_at DESC
                                LIMIT $6
                            )
                            UPDATE %I
                            SET created_at = $4::date +
                                             ((RANDOM() * ($5::date - $4::date)) || '' days'')::interval,
                                updated_at = $4::date +
                                             ((RANDOM() * ($5::date - $4::date)) || '' days'')::interval
                            WHERE id IN (SELECT id FROM cte)', table_name, table_name)
                    USING hall_id, start_date, end_date, new_start_date, new_end_date, limit_count;
            END LOOP;
    END
$$;
Leave a Comment