I think this is because RECURSIVE is modifier of WITH statement, not a property of common table expression z
, so you can use it like this:
with recursive
x as (
select 1 y
),
z(q) as (
select y from x
union all
select q + 1 from z where q < 4
)
select * from z;