PostgreSQL の再帰SQL で要素の連結結果を求める。

再帰SQL で要素の連結、どいうことかというと、
テーブル名:division

id parent_id name
1 null A
2 1 B
3 2 C
4 2 D

というテーブルが存在した時、再帰SQLを走らせて、
”A”
"A,B"
"A,B,C"
"A,B,D"
のように各々のレコードに対して親→子の name列の連結=つまりPATH に相当するもの
を抽出したい。

以下の再帰SQL chain_name として取得できる。

WITH RECURSIVE r(id, parent_id, depth, chain_name, name) AS (
  SELECT id, parent_id, 0, name AS chain_name, name 
  FROM division WHERE id = 1
UNION ALL
  SELECT d.id, d.parent_id, r.depth+1, concat(r.chain_name,',',d.name), d.name 
  FROM division d, r WHERE d.parent_id = r.id
)
SELECT r.id, r.parent_id, r.depth, r.chain_name, r.name FROM r