A window frame is either row-based or time-based. ROWS counts a fixed number of preceding rows; it cannot see a calendar gap between two rows. RANGE with an interval counts a span of time, so gaps are respected.
SELECT txn_date, SUM(amount) OVER ( PARTITION BY user_id ORDER BY txn_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW ) AS rolling FROM txns ORDER BY txn_date;
SELECT txn_date, SUM(amount) OVER ( PARTITION BY user_id ORDER BY txn_date RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW ) AS rolling FROM txns ORDER BY txn_date;
Wrong by $10, no error raised, and every calendar gap makes it worse.
Use RANGE BETWEEN INTERVAL '6 days' PRECEDING, or pre-aggregate to one row per entity per day so a ROWS frame is honest again.
RANGE BETWEEN INTERVAL '<N> days' PRECEDING AND CURRENT ROW
Where RANGE with intervals is unsupported, the per-day date-spine form is the portable equivalent.