擅长:python、mysql、java
<p><strong>首选解决方案:</strong></p>
<p>一个<a href="http://en.wikipedia.org/wiki/Linked_list" rel="nofollow noreferrer">linked list</a>将是实现这一目标的常用方法。按顺序返回项的查询是<a href="https://stackoverflow.com/questions/515749/how-do-i-sort-a-linked-list-in-sql/515761#515761">trivial in Oracle</a>,但我不确定在PostreSQL中如何执行。</p>
<p>另一个选择是使用<a href="http://www.postgresql.org/docs/current/static/ltree.html" rel="nofollow noreferrer">ltree module for postgresql.</a>实现这个</p>
<p><strong>不太优雅(而且写得很重)的解决方案:</strong>
启动事务。“在行级锁的作用域内选择“更新”。将目标记录移动到位置0,将目标未来的后续记录更新到位置高于目标原始位置(或相反)的+1,然后将目标更新到新位置-无唯一约束所需的单个附加重写。提交:D</p>
<p><strong>如果您可以等待Postgresql 8.5(Alpha可用),则可以使用简单(但仍然编写繁重)的解决方案:)</strong></p>
<p>将其包装在事务中,选择在作用域中更新,并使用延迟约束(<a href="http://developer.postgresql.org/pgdocs/postgres/release-8.5.html#AEN94987" rel="nofollow noreferrer">postgresql 8.5 has support for deferred unique constraints</a>类似于Oracle)。</p>