ID Ändern

Hallo *,

muss in eine bestehende Datenbank (Postgre 8.1) die ID’s von eine Tabelle ändern. Diese ID’s werden aber von fast alle andere Tabellen referenziert. Das heisst, dass ich auch die Einträge dort ändern muss. Es hört sich im ersten Moment recht kompliziert für mich an, aber das ist nun mal die Aufgabe.
Hat jemand schon etwas ähnliches gemacht und kann mir sagen worauf ich achten muss um das auch erfolgreich durchzuführen?

Bin für alle Vorschläge, Meinungen etc… dankbar.

cu nanostruct

Warum? Sind die bestehenden nicht schön genug?

Andreas

Nicht mehr. Sie sind zu gross. und können für andere Zwecke nicht benutzt werden. In der DB gibt es einen Bereich (von 20 000 bis 100 000) der leer ist. Da mussen alle, die über 100 000 sind.

cu nanostruct

Naja. Wenn diese IDs als Foreign Keys verwendet werden, dann doch sicher nicht auch irgendwo, wo Mensch mit zutun hat, oder? Und falls doch, dann existieren u.U. Ausdrucke mit den alten Nummern. Was ist damit?

test=# create table forum(id int primary key, name text);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "forum_pkey" for table "forum"
CREATE TABLE
test=*# insert into forum values (11, 'test1');
INSERT 0 1
test=*# insert into forum values (12, 'test2');
INSERT 0 1
test=*# insert into forum (select id-10, name from forum where id > 10);
INSERT 0 2
test=*# select * from forum;
 id | name
----+-------
 11 | test1
 12 | test2
  1 | test1
  2 | test2
(4 rows)

Dasselbe halt für alle beteiligten Tabellen. Und dann die nicht benötigten Daten löschen. Es sollte klar sein, daß Du damit jede Menge toter Tupel erzeugst. Und es wird dauern. Und Du wirst das alles in einer TX machen wollen.

Andreas

Hallo *,

erstmal danke für deine Antwort Andreas.

Das sind die IDs von der ‘zentralen’ Tabelle (wenn man das so sagen darf). Die IDs tauchen in fast alle andere Tabellen als FK.

Ich denke, dass das nicht wirklich klappen wird, denn unter 100 000 gibt es auch sehr viele IDs (sind recht ungleichmässig verteilt) und dadurch sehr viele Doubletten entstehen, was nicht erwünscht ist.

Nach einem ausführlichen Gespräch mit der Leitung muss das nicht mehr gemacht werden :slight_smile:

Bitte.

Nach einem ausführlichen Gespräch mit der Leitung muss das nicht mehr gemacht werden > :slight_smile: >

An der Stelle, wo von der Materie keine Ahnung habenden Schlips dem Admin reinreden, macht das auch keinen Spaß mehr…

Andreas