2012年3月 1日

[pgsql-jp: 41060]再起的なSQLで配列の型について

ohara と申します。

https://www.sraoss.co.jp/technology/postgresql/8.4/
この「問い合わせ言語」のWITH RECURSIVEの項のあたりを
参考にして、以下のテーブルを作成しました。

create table tree(id text, parentid text);
insert into tree values

( '001',null),
( '002', '001'),
( '003', '001'),
( '004', '002'),
( '005', '002'),
( '006', '003'),
( '007', '006'),
( '008', '006'),
('050',null),
('055', '050'),
('056', '050'),
('058', '056');


id が text 型や varchar だとエラーにならないのですが、
id を varchar(12) や varchar(64) にすると、

ERROR: recursive query "rec" column 4 has type character varying(12)[]
in non-recursive term but type character varying[] overall
LINE 2: select t.id, t.parentid, 1, array[t.id]

とエラーになります。SQL は以下となります。

with recursive rec(id, parentid, lv, path) as (
select t.id, t.parentid, 1, array[t.id]
from tree t
where t.parentid is null
union all
select t.id, t.parentid, rec.lv + 1, rec.path || t.id
from tree t, rec
where t.parentid = rec.id
)
select id, parentid, lv, path
from rec order by path;

id を varchar(12) にしてもエラーにならないようにするには
どうすればよろしいでしょうか。

ご教授していただけますと幸いです。
よろしくお願いいたします。

--
apostleofwhom <apostleofwhom@xxxxx>


投稿者 xml-rpc : 2012年3月 1日 13:41
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/108961
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。