Bryan Wilkerson wrote:
My first question concerns self ordering lists. Basically, a numeric column that automatically maintains an order but allows arbitrary reordering by the user. For example, a media playlist or the priority of workitems within a parent container ;) This seems like a common pattern. priority | workitem ---------+----------- 1 | task 1 2 | task 2 3 | task 3 4 | task 4 5 | task 5 Insert a new task with priority==2 and... update tablename set priority=priority+1 where priority >= 2 delete task with priority==2 and... update tablename set priority=priority-1 where priority > 2 reorder task with priority==2, set its priority=4 update tablename set priority=priority+1 where priority >= 4
> update tablename set priority=priority-1 where priority > 2 > and priority < 4
etc.... I've implemented in my model code but it has some deadlock issues and I really strongly have believed all along that this belongs in the db anyway. Implementing the above with triggers is a tricky problem because the trigger would key off the priority change and the successive updates would recusively trigger.
Why not update everything into a temp table first, then update the original with the new values from that? Or maybe a view is better suited to this.
brian ---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq