[pgsql-jp: 29518] Re: シーケンス型データの行の並べ換えについて。

Takao Kato sirius @ jp.fujitsu.com
2003年 3月 31日 (月) 13:32:49 JST


 加藤@川崎です。

> 以下の様なテーブルからid番号1の行をを削除した場合
> 残りの行を自動的にid番号をキーナンバーとして降順、昇順に並べ換える
> 関数等はPostgreSQLに順備されていないのでしょうか?

リナンバリングしたいと言うことでしょうか?

「弊害」を一切考えない、かつ、一度に消すIDが一つと言う条件で昇順にリナ
ンバリングするのであれば、

begin;
delete t_hoge where id = 消したいID;
update t_hoge set id = id - 1 where id > 消したいID;
select setval('t_hoge_id_seq',(select count(*) from t_hoge));
commit;

と力業で実行できるかと思います。

同時に複数消す場合は再帰関数とか単純にループさせるかは別途考えるとして
必要回数回す必要性がでてきますね。そうなるとplpgsql(内)とかphp/perl(外)
とかを利用するのがよろしかろうと。


でも、シリアル型の意見あいを考えた場合、(データベース引越しに伴うデー
タ整理とか、シリアル型が溢れそう(設計がまずい?)でもない限りシリアル型
を)こんな使い方しないのでは?と思ったりします。

どうでしょう > 識者の皆さん

---------------------------------------------------------------------
加藤@川崎
お便りは kato @ lantc.cs.fujitsu.co.jp まで



pgsql-jp メーリングリストの案内