
Zitat von
beho
Hallo,
innerhalb einer Tabelle habe ich sehr viele Werte, aber keine explizit so genannte id, die auf einem serial beruht... die Daten liegen ungeordnet vor.
Nun möchte ich die Daten innerhalb der Tabelle nach einer bereits vorhandenen Spalte ordnen und anschließend mit dieser Ordnung ein serial Attribut hinzufügen...
Das das so einfach nicht geht, weiß ich. Leider kann ich die Tabelle nicht umkopieren, da ständig neue Daten auflaufen.
Meine Momentane Idee ist, eine id integer Spalte hinzuzufügen, mit einer Function die id nach meiner Ordnung zu inkrementieren und anschließend eine Sequenz zu erstellen...
Habt ihr bessere Ideen?
Viele Grüße
beho
Du wirst wohl um eine komplette Tabellensperre nicht drum herum kommen. Geht das? Falls ja, das Zufügen der ID-Spalte und die Sortierung der bisherigen Zeilen könnte so erfolgen:
Code:
test=# select * from unsortiert ;
s
-------
bla
fasel
a
u
b
x
(6 rows)
test=*# alter table unsortiert add column id int;
ALTER TABLE
test=*# create sequence unsort;
CREATE SEQUENCE
test=*# update unsortiert set id = bla.id from (select nextval('unsort') as id, foo.s from (select s from unsortiert order by s)foo) bla where unsortiert.s=bla.s;
UPDATE 6
test=*# select * from unsortiert ;
s | id
-------+----
a | 1
b | 2
bla | 3
fasel | 4
u | 5
x | 6
(6 rows) Dann die ID-Spalte einen Constraint setzen, daß das nextval() von der Sequence wird.
Andreas
Lesezeichen