Your CTE is not recursive. Mistakenly, you select from the table again instead of the CTE, which is what would create the recursion.
Then, a LIMIT clause refers to the whole query, but the query has two parts glued with UNION ALL. In order to make the first part a separate query with an own LIMIT clause, you need parantheses around it.
The corrected query:
with recursive cte1 as
(
(
select 1 as idx, company_id, field_values
from transaction_detail
where company_id = 12345
limit 1
)
union all
select idx + 1 as idx, company_id, field_values
from cte1
where idx < 6
)
select *
from cte1;
Demo: https://dbfiddle.uk/gfDNQ21m
An alternative is to select the one row in a separate (non-recursive) CTE first:
with recursive
one_row as
(
select *
from transaction_detail
where company_id = 12345
fetch first row only
),
cte1 as
(
select 1 as idx, company_id, field_values
from one_row
union all
select idx + 1 as idx, company_id, field_values
from cte1
where idx < 6
)
select *
from cte1;
Demo: https://dbfiddle.uk/52PKsIky
(I've used the standard SQL fetch first row only here instead of LIMIT, but that's just personal preference, it makes no difference to the query execution.)
(select ... )...