Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Wie bekomme ich den seq-Schlüssel wieder aktuell

  1. #1
    gdietrich ist offline Neuer Benutzer
    Registriert seit
    04.01.2012
    Beiträge
    17

    Standard Wie bekomme ich den seq-Schlüssel wieder aktuell

    Hallo,
    habe folgendes Problem und komme einfach nicht weiter.

    Habe aus einer Tabelle die Daten exportiert, und diese in eine andere Tabelle importiert.

    Beide Tabellen haben die gleiche Struktur, von daher gibt es damit keine Probleme.

    Mein jetziges Problem ist jedoch, dass ich in der neuen Tabelle keinen Daten einfügen kann.

    Problem ist auch bekannt, da der Sequence Key der neuen Tabelle auf 1 steht da er ja nicht mitbekommen hat, dass in die Tabelle Daten eingefügt worden sind.

    Wie kann ich das gerade biegen oder noch besser wie vermeide ich diesen Fehler grundsätzlich ?

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

    Standard

    Zitat Zitat von gdietrich Beitrag anzeigen
    Hallo,
    habe folgendes Problem und komme einfach nicht weiter.

    Habe aus einer Tabelle die Daten exportiert, und diese in eine andere Tabelle importiert.

    Beide Tabellen haben die gleiche Struktur, von daher gibt es damit keine Probleme.

    Mein jetziges Problem ist jedoch, dass ich in der neuen Tabelle keinen Daten einfügen kann.

    Problem ist auch bekannt, da der Sequence Key der neuen Tabelle auf 1 steht da er ja nicht mitbekommen hat, dass in die Tabelle Daten eingefügt worden sind.

    Wie kann ich das gerade biegen oder noch besser wie vermeide ich diesen Fehler grundsätzlich ?
    Du kannst nun die Sequence manipulieren, siehe PostgreSQL: Documentation: Manuals: Sequence Manipulation Functions.

    Zukünfig bei sowas für diese Spalte DEFAULT einsetzen, oder weglassen (in der Spalten-Aufzählung beim INSERT).

    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
    gdietrich ist offline Neuer Benutzer
    Registriert seit
    04.01.2012
    Beiträge
    17

    Standard

    Ok da habe ich doch wahrscheinlich noch das Wichtigste vergessen, sorry !
    Die Daten wurden in ein Excel File exportiert, das ich auch wieder importiere.
    Ich kann die Spalte nicht weglassen, das sie in einer anderen Tabelle als n-n Beziehung gespeichert sind, also auch DEFAULT nicht möglich.

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.345

    Standard

    Zitat Zitat von gdietrich Beitrag anzeigen
    Ok da habe ich doch wahrscheinlich noch das Wichtigste vergessen, sorry !
    Die Daten wurden in ein Excel File exportiert, das ich auch wieder importiere.
    Ich kann die Spalte nicht weglassen, das sie in einer anderen Tabelle als n-n Beziehung gespeichert sind, also auch DEFAULT nicht möglich.
    Ja, also dann bleibt also nur der Weg, die Spalte mit zu übernehmen und dann die Sequence zu setzen, wo war jetzt Dein Problem?

    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

  5. #5
    gdietrich ist offline Neuer Benutzer
    Registriert seit
    04.01.2012
    Beiträge
    17

    Standard

    Das Problem ist
    SELECT setval('sequence', SELECT höchste Zahl in der Tabellenspalte );
    Ich kann keinen count machen, da dort schon Datensätze gelöscht wurden, die letzte Nummer also höher ist als die Anzahl der Datensätze.
    Wie bekomme ich den Select der Tabelle in den setval ?
    Steh da gerade auf dem Schlauch !

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.345

    Standard

    Zitat Zitat von gdietrich Beitrag anzeigen
    Das Problem ist
    SELECT setval('sequence', SELECT höchste Zahl in der Tabellenspalte );
    Ich kann keinen count machen, da dort schon Datensätze gelöscht wurden, die letzte Nummer also höher ist als die Anzahl der Datensätze.
    Wie bekomme ich den Select der Tabelle in den setval ?
    Steh da gerade auf dem Schlauch !
    max() ist eine Funktion, die bereits erfunden wurde ;-)

    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

  7. #7
    gdietrich ist offline Neuer Benutzer
    Registriert seit
    04.01.2012
    Beiträge
    17

    Standard

    AU Backe ! Voll auf die 12 !

    Bekomme ich das ganze auch in einen Befehl ?

    SELECT setval('sequence', SELECT max(id) from table)

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.345

    Standard

    Zitat Zitat von gdietrich Beitrag anzeigen
    AU Backe ! Voll auf die 12 !

    Bekomme ich das ganze auch in einen Befehl ?

    SELECT setval('sequence', SELECT max(id) from table)

    Bist nah dran...

    Code:
    test=# create table gdietrich (s serial);
    NOTICE:  CREATE TABLE will create implicit sequence "gdietrich_s_seq" for serial column "gdietrich.s"
    CREATE TABLE
    Time: 2,156 ms
    test=*# insert into gdietrich select * from generate_series(1,1000)s;
    INSERT 0 1000
    Time: 1,976 ms
    test=*# select setval('gdietrich_s_seq',(select max(s) from gdietrich));
     setval
    --------
       1000
    (1 row)
    
    Time: 0,663 ms
    test=*# insert into gdietrich (s) values (default) returning s;
      s
    ------
     1001
    (1 row)
    
    INSERT 0 1
    Time: 0,274 ms
    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

  9. #9
    gdietrich ist offline Neuer Benutzer
    Registriert seit
    04.01.2012
    Beiträge
    17

    Standard

    Danke !
    Knapp daneben ist auch vorbei !

    Ich weiss das gehört jetzt nicht hierher, aber eine kurze Frage hätte ich noch:
    Hab das Problem das ich ein Feld anlegen muss in dem die Produktionsdauer gespeichert wird.
    Hatte ich zuerst auf TIME gesetzt, kein Problem.
    Nun ist der Fall aufgetaucht, dass die Dauer über einen Tag geht, damit ist ja TIME aussen vor !
    Gibt es eine andere Möglichkeit ausser meiner jetzigen ( textfeld ##:## ) ?
    Mit diesem habe ich natürlich Probleme beim Rechnen.

  10. #10
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.345

    Standard

    Zitat Zitat von gdietrich Beitrag anzeigen
    Danke !
    Knapp daneben ist auch vorbei !

    Ich weiss das gehört jetzt nicht hierher, aber eine kurze Frage hätte ich noch:
    Hab das Problem das ich ein Feld anlegen muss in dem die Produktionsdauer gespeichert wird.
    Hatte ich zuerst auf TIME gesetzt, kein Problem.
    Nun ist der Fall aufgetaucht, dass die Dauer über einen Tag geht, damit ist ja TIME aussen vor !
    Gibt es eine andere Möglichkeit ausser meiner jetzigen ( textfeld ##:## ) ?
    Mit diesem habe ich natürlich Probleme beim Rechnen.
    Entweder Du nimmst den Datentyp INTERVAL, wenn es wirklich nur um die Dauer geht, oder, aber das ist noch sehr neu (und extrem cool) PERIOD, guggst Du Temporal Postgres - Reference

    Mit PERIOD kannst dann z.B. auch prüfen, ob sich die Zeiten nahtlos anschließen oder überlappen (oder aber Du verhinderst mit einem Constraint, daß sie sich überlappen dürfen) und so weiter, sehr cooles Feature ...


    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

Seite 1 von 2 12 LetzteLetzte

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