Steve,

Here's your problem and its solution as I understand it:

-- Given an example table like this (data isn't too important -- just the
sequencing)
create table meh
(
      id        serial primary key
    , word   varchar(10)
);

-- Populate it with data

insert into meh (word) values
    ('one'),
    ('two'),
    ('three'),
    ('four'),
    ('five'),
    ('six'),
    ('seven'),
    ('eight'),
    ('nine'),
    ('ten');

-- Delete a row from the middle of the table
delete from meh where id = 5;

-- Renumber all of the rows ABOVE the deleted row
-- This will maintain sequencing. This assumes that no gaps existed prior to
the delete of this row,
-- and that only one row was deleted.

update meh
set id = id - 1
where id > 5;

At this point, if you've got a sequence that populates the id field, you'll
need to set its nextval.


Dave

On Thu, Jun 19, 2008 at 7:54 AM, Steve Clark <[EMAIL PROTECTED]> wrote:

> Scott Marlowe wrote:
>
>> On Wed, Jun 18, 2008 at 3:50 PM, Steve Clark <[EMAIL PROTECTED]>
>> wrote:
>>
>>  I realize this is certainly not the best design - but at this point in
>>> time
>>> it can't be changed. The table
>>> is rarely updated and never concurrently and is very small, typically
>>> less
>>> than 100 rows so there really is
>>> no performance impact.
>>>
>>
>>
>> Then the easiest way to renumber a table like that is to do something
>> like:
>>
>> create temp sequence myseq;
>> update table set idfield=nextval('myseq');
>>
>> and hit enter.
>> and pray.  :)
>>
>>
>>  Hi Scott,
>
> I am not sure that will do what I want. As an example
> suppose I have 5 rows and the idfield is 1,2,3,4,5
> now row 1 is updated, not the idfield but another column, then row 3 is
> deleted.
> Now I would like to renumber  them such that 1 is 1, 2 is 2, 4 is 4 , 5 is
> 4.
>
> I don't think what you wrote will necessarily keep them in the same
> relative order that they
> were before.
>
> Regards,
> Steve
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>

Reply via email to