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
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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.
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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 !
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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...
AndreasCode: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
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen