PostgreSQL - OIDs ändern

Diskutiere PostgreSQL - OIDs ändern im Developer Network Forum im Bereich Hardware & Software Forum; Servus zusammen, vielleicht hab ich ja Glück und hier kennt sich jemand mit damit aus... Ich habe eine Relation mit < 2.000.000 Datensätzen...
  • PostgreSQL - OIDs ändern Beitrag #1
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Servus zusammen,

vielleicht hab ich ja Glück und hier kennt sich jemand mit damit aus...

Ich habe eine Relation mit < 2.000.000 Datensätzen, denen von Postgres je eine OID zugewiesen wird.

Leider kam es aus bisher noch unbekannter Ursache zu OID-Duplikaten - ~100 OIDs sind doppelt vergeben. Ich bin mittlerweile schon soweit dass es mir fast egal ist, warum das der Fall ist (vermutlich ein Postgres-Bug; wenn ich neue Daten inserte, wird die OID "ganz normal" hochgezählt), aber ich habe noch keinen praktikablen Workflow, die Duplikate aufzulösen.


Gibt es eine Möglichkeit die OIDs manuell zu modifizieren? (PostgreSQL 8.x)
 
  • PostgreSQL - OIDs ändern Beitrag #2
haiko

haiko

Bekanntes Mitglied
Dabei seit
09.01.2003
Beiträge
4.727
Reaktionspunkte
1
Ort
Kempten
hmm, ich würd mir die doppelten oids ausgeben lassen und diese in eine sql-anweisung exportieren. danach würd ich die neu einfügen als neuer datensatz, dadurch würden die neue gültige oids kriegen.

das einzige problem wäre, daß evtl vorhandene abhängigkeiten zu anderen daten nicht mehr funktionieren.
 
  • PostgreSQL - OIDs ändern Beitrag #3
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
hmm, ich würd mir die doppelten oids ausgeben lassen und diese in eine sql-anweisung exportieren. danach würd ich die neu einfügen als neuer datensatz, dadurch würden die neue gültige oids kriegen.

das einzige problem wäre, daß evtl vorhandene abhängigkeiten zu anderen daten nicht mehr funktionieren.

Das wäre ein Ansatz, ja, aber das muss ich leider auch schon wieder ausschließen. Die Beziehungen (wenn auch nicht über die OID) verteilen sich über die gesamte Datenbank, nach einem Export + Reimport liefe die Wiederherstellung wahrscheinlich nicht fehlerfrei ab. Zudem ginge andere automatisch generierte "unique data" verloren. Leider... trotzdem vielen Dank.
 
  • PostgreSQL - OIDs ändern Beitrag #4
haiko

haiko

Bekanntes Mitglied
Dabei seit
09.01.2003
Beiträge
4.727
Reaktionspunkte
1
Ort
Kempten
hmm, ok, n anderer ansatz mit mehr arbeitsaufwand:

ändere den feldtyp der oid (keine ahnung, ob das bei postgresql geht) in double oder so, dann ändere die doppelten einträge von hand. nach der aktion wieder den typ der spalte zurückändern.
 
  • PostgreSQL - OIDs ändern Beitrag #6
the ubm

the ubm

Senior Moderator
Dabei seit
29.05.2005
Beiträge
9.464
Reaktionspunkte
1
Es waren nicht zufällig insgesamt mehr als ca. 4 Milliarden Datensätze in der Datenbank? Die OID ist ja nur ein 32Bit Wert.
Manuell (ohne Datenbankinterface) editieren sollte gehen, wenn die Datenbankendateien nicht komprimiert oder sowas abgelegt werden. Ist aber sehr viel Aufwand.
 
  • PostgreSQL - OIDs ändern Beitrag #7
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
keine 4 Mrd. Wie gesagt, neue Objekte bekommen eine neue, noch nicht vergebene OID :weiss:
 
  • PostgreSQL - OIDs ändern Beitrag #8
the ubm

the ubm

Senior Moderator
Dabei seit
29.05.2005
Beiträge
9.464
Reaktionspunkte
1
Hätte ja sein können, dass die OID, die jetzt neu vergeben wird, von Datensätzen stammt, die schon wieder gelöscht sind. Und bei den 100 doppelten lag der Fall so, dass diese noch vorhanden waren. Es scheint dann wohl ehr ein Bug zu sein oder kann es sein, dass du irgendwie ein Backup eingespielt hast und so etwas durcheinander kam?
 
  • PostgreSQL - OIDs ändern Beitrag #9
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Nein, leider nicht. Die Duplikate sind im laufenden Betrieb entstanden. Auch wenn es verschiedene Wege gibt, wie das geschieht, es geschieht auf keinen Fall parallel. Es handelt sich hierbei mit Sicherheit um einen Bug seitens Postgres. Aber die OIDs einfach zu ändern, am schönsten mit einem UPDATE, scheint nicht möglich zu sein (hatte heute im Büro nochmal etwas Zeit zu recherchieren).

Ich danke Euch abr für Eure Ratschläge und Hilfeleistung. :goil:
 
Thema:

PostgreSQL - OIDs ändern

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben