Re: list ranking
От | Joe Conway |
---|---|
Тема | Re: list ranking |
Дата | |
Msg-id | 3EEAB3E2.7000508@joeconway.com обсуждение исходный текст |
Ответ на | list ranking (Jodi Kanter <jkanter@virginia.edu>) |
Список | pgsql-admin |
Jodi Kanter wrote: > We have a set of records in a table that needs to be ranked. We thought > of adding a ranking field, but the problem is that the ranking could > change often and there could be additions and deletions from the list. > Updating this ranking field is quickly going to get messy. > > Is anyone familiar with link surgery? Can we do this with a doubly > linked list? Is there a standard database solution for doubly linked > lists? or another way to solve this that I don't see? > Any suggestions on structure would be greatly appreciated. It sounds to me like you just need a way to enforce a sort order that is able to handle insertions into the middle of the list? What about something like this: create table foo(f1 int, f2 text); create unique index foo_idx1 on foo(f2); insert into foo values(1,'0000'); insert into foo values(2,'0001'); -- -- insert new values in between '0000' and '0001' insert into foo values(3,'0000.0000'); insert into foo values(4,'0000.0001'); -- -- we happen to need one right between those last two insert into foo values(5,'0000.0000.0000'); -- -- now get them back in rank order regression=# select * from foo order by f2; f1 | f2 ----+---------------- 1 | 0000 3 | 0000.0000 5 | 0000.0000.0000 4 | 0000.0001 2 | 0001 (5 rows) You might want to periodically run a maintenance script that collapses the segments (i.e. turn f2 above into '0000', '0001', '0002', '0003', and '0004'). HTH, Joe
В списке pgsql-admin по дате отправления: