Du könntest eine temporäre Tabelle für die neuen anlegen und dann per UPDATE die reguläre Tabelle dort updaten, wo sie geändert ist. Danach löschst du die temporäre Tabelle wieder.
CU Uwe
Hallo,
ich habe ein Wahrenwirtschaftssystem mit einer Postgresql - Datenbank.
Meine Artikelliste möchte ich mit einer CSV-Datei uploaden. Da klappt jetzt auch schon einigermasten. Nur wir jezt jede Woche die Artikelliste aktualisiert und ich möchte die Änderungen dann wieder mit der CSV-Datei uploaden.
Wenn ich daß aber mache, mekert Postgresql, daß der Artikel schon vorhanden ist, anstadt Ihn zu ändern. Muß man jedesmal die Tabelle erst wieder löschen, und dann die Artikel wieder uploaden? Damit hätte ich probleme, da ich auch noch andere Artiekel per Hand eingegeben habe die ich behalten möchte.
Hat da wer eine Idee?
Gruß Nixdorf
Du könntest eine temporäre Tabelle für die neuen anlegen und dann per UPDATE die reguläre Tabelle dort updaten, wo sie geändert ist. Danach löschst du die temporäre Tabelle wieder.
CU Uwe
Have a lot of fun!
Nun, eigentlich müsste ein Programm/Script bei dir dafür sorgen, das nur geänderte Datensätze eingespielt werden. Wie genau das auszusehen hat, kann dir wohl keiner sagen, ohne mehr über die Struktur deiner Db zu kennen und wie die Daten angeliefert werden.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Kannst Du bei Deinem tun ausschließen, daß ForeignKey - Bindungen zerstört werden?
Artikelliste klingt für mich zumindest stark danach, daß da von anderen Tabellen aus via FK referenziert wird.
Bei einem Design mit FK-Beziehungen hättest Du da ganz andere Probleme. Gut, okay, man kann mit DEFERRED da einiges abfangen, aber sauberer wäre es hier IMHO, die neuen Daten erst mal in eine temp. Zwischentabelle zu laden und von da aus mit SQL zu schauen, welche Records nun neu und welche geändert sind und dann weiter mit normalem SQL diese Dinge zu tun.Wenn ich daß aber mache, mekert Postgresql, daß der Artikel schon vorhanden ist, anstadt Ihn zu ändern. Muß man jedesmal die Tabelle erst wieder löschen, und dann die Artikel wieder uploaden? Damit hätte ich probleme, da ich auch noch andere Artiekel per Hand eingegeben habe die ich behalten möchte.
Andreas
--
Papa-Kind-Kur vom 8. bis 29. September ;-)
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
Hallo,
eine identische zusätzlichen Tabelle parts_temp habe ich erstellt, da werde ich dann die aktuelle Artikelliste zunächst reinpacken. Wie kann ich es dann am besten veranlassen, das alle Artikel die sich geändert haben bzw. neu sind dann in die Tabelle parts übernommen werden. Wie kann ich es veranlassen das Artikel die nicht mehr vorhanden sind gellöscht werden?
Vielen Dank für die Hilfe...
Gruß Nixdorf
Mal als Ansatz:
AndreasCode:test=# select * from parts; id | name ----+---------------------- 1 | soll bleiben 2 | soll erneuert werden 4 | soll gelöscht werden (3 rows) test=*# select * from parts_temp ; id | name ----+----------------- 2 | geänderter wert 3 | neuer wert (2 rows) test=*# update parts set name=(select parts_temp.name from parts_temp where parts.id=parts_temp.id) where id in (select id from parts_temp); UPDATE 1 test=*# select * from parts; id | name ----+---------------------- 1 | soll bleiben 4 | soll gelöscht werden 2 | geänderter wert (3 rows)
--
Papa-Kind-Kur vom 8. bis 29. September ;-)
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
Hallo,
ich habe es probiert mit:
update parts set sellprice=(select parts_temp.sellprice from parts_temp where parts.id=parts_temp.id) where id in (select id from parts_temp);
bekomme aber zur Antwort:
bash: syntax error near unexpected token `('
Da muß irgendetwas mit der Syntax nicht stimmen.
Gruß Nixdorf
--
Papa-Kind-Kur vom 8. bis 29. September ;-)
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
Hallo,
ich habe eine Konsole gestartet. Dann mit su root auf root rewechselt.
Dann su postgres eingegeben und dann
update parts set sellprice=(select parts_temp.sellprice from parts_temp where parts.id=parts_temp.id) where id in (select id from parts_temp);
ausgeführt. Habe ich da noch einen Denkfehler?
Gruß Nixdorf
Ja, du führst das auf der Shell des Users postgres aus, du musst dich erst noch zur Datenbank mittels psql verbinden.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen