Je suppose que vous voulez déplacer votre where document_id=1 dans la partie inférieure de la requête.
Méfiez-vous cependant, car une requête récursive n'injecte pas la contrainte dans le with
déclaration. En d'autres termes, il analysera en fait l'intégralité de votre table, créera de manière récursive toutes les possibilités et filtrera celles dont vous avez besoin.
Vous serez mieux avec une fonction sql dans la pratique, c'est-à-dire quelque chose comme ceci :
create or replace function gen_links(int) returns table (doc_id int, doc_url text) as $$
WITH RECURSIVE generate_links(document_id,url_id) as(
select document_id,url_id from document_urls where document_id=$1
UNION ALL
select du.document_id,du.url_id from generate_links gl,document_urls du
where gl.url_id=du.url_id
)
SELECT * FROM generate_links GROUP BY url_id,document_id;
$$ language sql stable;