Ergebnis 1 bis 5 von 5

Thema: Primary key nachträglich erstellen für sehr grosse Tabelle

  1. #1
    Hanno ist offline Neuer Benutzer
    Registriert seit
    21.01.2010
    Beiträge
    26

    Standard Primary key nachträglich erstellen für sehr grosse Tabelle

    Hallo,

    Ich habe eine etwas spezielle Frage. ich habe eine Tabelle mit sehr vielen Daten (etwa 8,5 Mio Rows). Ich habe die Tabelle aus einer anderen DB nach Postgres kopiert. Leider ging aus irgendeinem Grund beim kopieren der Primärschlüssel verloren. Nun habe ich versucht einfach den Schlüssel nachträglich mit Hilfe von ügAdmin3 wieder zu erstellen. Hierbei bekommen ich (vermutlich aufgrund der grosse Datenmenge) immer einen Fehler wegen zu wenig Speicherplatz angezeigt.

    HINWEIS: ALTER TABLE / ADD PRIMARY KEY erstellt implizit einen Index »pk_trip_all« für Tabelle »trip_all«
    FEHLER: Speicher aufgebraucht
    DETAIL: Fehler bei Anfrage mit Größe 268435456.

    ********** Error **********

    FEHLER: Speicher aufgebraucht
    SQL state: 53200
    Detail: Fehler bei Anfrage mit Größe 268435456.

    Hat jemand eine Idee wie ich den Schlüssel angelegt bekomme?
    Ich habe schon in der postgresql.conf datei die Einträge für shared_buffers und work_mem auf 120000MB erhöht, wobei ich zugeben muss, dass ich nicht so genau weiss was das bewirkt. Aber es geht trotzdem nicht.

    Wer hat einen Tipp und kann mir helfen?

    Vielen Dank schon einmal für die Hilfe

    Gruss
    Hanno

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von Hanno Beitrag anzeigen
    Hallo,

    Ich habe eine etwas spezielle Frage. ich habe eine Tabelle mit sehr vielen Daten (etwa 8,5 Mio Rows). Ich habe die Tabelle aus einer anderen DB nach Postgres kopiert. Leider ging aus irgendeinem Grund beim kopieren der Primärschlüssel verloren. Nun habe ich versucht einfach den Schlüssel nachträglich mit Hilfe von ügAdmin3 wieder zu erstellen. Hierbei bekommen ich (vermutlich aufgrund der grosse Datenmenge) immer einen Fehler wegen zu wenig Speicherplatz angezeigt.

    HINWEIS: ALTER TABLE / ADD PRIMARY KEY erstellt implizit einen Index »pk_trip_all« für Tabelle »trip_all«
    FEHLER: Speicher aufgebraucht
    DETAIL: Fehler bei Anfrage mit Größe 268435456.

    ********** Error **********

    FEHLER: Speicher aufgebraucht
    SQL state: 53200
    Detail: Fehler bei Anfrage mit Größe 268435456.

    Hat jemand eine Idee wie ich den Schlüssel angelegt bekomme?
    Ich habe schon in der postgresql.conf datei die Einträge für shared_buffers und work_mem auf 120000MB erhöht, wobei ich zugeben muss, dass ich nicht so genau weiss was das bewirkt. Aber es geht trotzdem nicht.

    Wer hat einen Tipp und kann mir helfen?

    Vielen Dank schon einmal für die Hilfe

    Gruss
    Hanno
    maintenance_work_mem ist Dein Freund. Stelle bitte work_mem wieder auf einen 'normalen' Wert, selbst auf einem gut ausgebauten System wäre 120 GByte a bissl arg viel. Wieviel RAM hat die Maschine? Ich würde maintenance_work_mem erst mal auf so 512MByte stellen.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Hanno ist offline Neuer Benutzer
    Registriert seit
    21.01.2010
    Beiträge
    26

    Standard

    Hallo,

    Ich bin immer wieder begeistert wie schnell man hier eine Antwort bekommt. Danke dafür und weiter so.

    Der Server hat 3GB RAM.
    Ich habe jetzt einmal die Einstellung für maintenance_work_mem angepasst. Nun scheint es zu gehen. Wenigstens bekomme ich keine fehlermeldung mehr, allerdings dauert das jetzt ewig und ich bin nicht sicher ob das Ergebnis noch kommt, da es immer noch rechnet. Heisst das jetzt, wenn man "zuviel MB" in der postgresql.conf für maintenance_work_mem angibt, dann läuft es auf einen Fehler? Weiss jetzt gerade nicht warum es funktioniert wenn ich weniger anstatt mehr angebe.

    Jetzt noch eine weitere Frage, die für euch wahrscheinlich sehr einfach ist. Wie kann ich abfragen ob die Werte in einer Spalte wirklich unique sind, also nicht doppelt vorkommen?

    Gruss
    Hanno

  4. #4
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    524

    Standard

    Zitat Zitat von Hanno Beitrag anzeigen
    Wie kann ich abfragen ob die Werte in einer Spalte wirklich unique sind, also nicht doppelt vorkommen?
    Code:
    SELECT die_spalte, count(*)
    FROM der_tabelle
    GROUP BY die_spalte
    HAVING count(*) > 1
    Zeigt alle mehrfachen Werte an.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von Hanno Beitrag anzeigen
    Hallo,

    Ich bin immer wieder begeistert wie schnell man hier eine Antwort bekommt. Danke dafür und weiter so.

    Der Server hat 3GB RAM.
    Ich habe jetzt einmal die Einstellung für maintenance_work_mem angepasst. Nun scheint es zu gehen. Wenigstens bekomme ich keine fehlermeldung mehr, allerdings dauert das jetzt ewig und ich bin nicht sicher ob das Ergebnis noch kommt, da es immer noch rechnet. Heisst das jetzt, wenn man "zuviel MB" in der postgresql.conf für maintenance_work_mem angibt, dann läuft es auf einen Fehler? Weiss jetzt gerade nicht warum es funktioniert wenn ich weniger anstatt mehr angebe.
    maintenance_work_mem ist der Speicherbereich, der für solche Operationen benutzt wird, work_mem ist was anderes, und shared_buffers wieder was anderes. Warum warst Du nicht zur PGConf, wenn Dich das interessiert? ;-) Also, gib die Begriffe mal in Google ein, das ist alles recht gut dokumentiert und oft genug diskutiert.


    Jetzt noch eine weitere Frage, die für euch wahrscheinlich sehr einfach ist. Wie kann ich abfragen ob die Werte in einer Spalte wirklich unique sind, also nicht doppelt vorkommen?

    Gruss
    Hanno
    siehe castorp


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Ähnliche Themen

  1. Neue Tabelle (Struktur) erstellen als Kopie der Referenztabelle
    Von Sergius im Forum Trigger und Funktionen
    Antworten: 8
    Letzter Beitrag: 20.06.2011, 08:28
  2. Antworten: 9
    Letzter Beitrag: 10.01.2011, 18:14
  3. Antworten: 6
    Letzter Beitrag: 09.08.2009, 19:05
  4. Primary Key nachträglich einfügen
    Von g06lepe im Forum SQL
    Antworten: 3
    Letzter Beitrag: 26.02.2009, 16:51
  5. Triggerfunktion zu Erstellen einer Tabelle.
    Von rolfS im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 04.09.2006, 15:25

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum